2010-08-18 13 views
10

Esiste un modo integrato in .NET 3.5 per convertire un periodo ISO 8601 in un TimeSpan/tick/millisecondi .NET?Convertire il periodo di tempo in formato ISO 8601 con zecche/millisecondi

+0

@Timwi: Sono un grande fan della brevità. Tuttavia, sono anche una persona naturalmente amichevole. Allora, cosa c'è di sbagliato nel augurare a tutti una buona giornata di lavoro? – yas4891

+0

perché lo stile di SO (e altri siti di rete Stack Exchange) non lo deve fare. Per la discussione usa http://meta.stackoverflow.com. – Richard

+0

Rimuovendolo, non sto indicando che non è amichevole. È solo che non contribuisce veramente alla domanda. Ricorda che questo non è un forum di discussione con post personalizzati. – Timwi

risposta

1

Purtroppo non c'è niente direttamente integrato in .NET.

E non c'è nessuno TimeSpan.ParseExact prima di .NET 4 che potrebbe essere utilizzato se i componenti della stringa sono noti.

+0

contrassegnato con risposta per essere il primo a rispondere. – yas4891

2

Anche se non c'è nulla direttamente nel framework .Net ho trovato che Joda.org ha implementato una cosa del genere e mi sono ricordato che Jon ha fatto un porting su .Net chiamato noda-time.

Una prima vista in this source code mostra che ha implementato qualcosa qui per questo scopo. Forse dovresti fare ulteriori indagini in questo progetto.

+0

Grazie per questo link. lavoro abbastanza impressionante fatto lì – yas4891

1

Non esiste un modo integrato. Per complicare ulteriormente le cose ISO 8601 durations è infatti totalmente incompatibile con TimeSpan o con qualsiasi altro modo esatto di misurare il tempo. Il motivo è che le durate ISO 8601 possono contenere anni e mesi. Il problema è che un anno può avere 365 o 366 giorni e un mese da 28 a 31 giorni. Problema Joda-Time solves this correlando tali periodi inesatti a un istante di tempo.

A meno che non si è fortunati ei periodi capita di utilizzare il P [AAAA] - [MM] - [hh] [GG] T: [mm]: formato [ss] perché poi basta:

string period = "P0003-06-04T12:30:05"; 
TimeSpan span = new TimeSpan(DateTime.Parse(period.Remove(0,1)).Ticks); 
+0

Per il mio compito specifico questo dovrebbe normalmente essere qualcosa come "PT1S" o "PT0.05999999999S", quindi l'analisi non è un vero problema. Volevo solo avere una buona soluzione per questo. Grazie per la tua risposta! – yas4891

Problemi correlati