2009-10-08 13 views
5

Ho una stringa, "2009-10-08 08: 22: 02Z", che è nel formato ISO 8601.Parsing della stringa ISO 8601 su DateTime in .NET?

Come utilizzare DateTime per analizzare questo formato?

+4

ISO 8601 consente anche di specificare un offset del fuso orario (ad esempio "2009-10-08T12: 52: 02 + 04: 30" sarebbe lo stesso orario di cui sopra). Tuttavia nessuna delle risposte risolve questo problema ... –

risposta

4

No, non è ISO 8601. Valid ISO 8601 la rappresentazione avrebbe T tra le parti di data e ora.

DateTime può gestire in modo nativo i formati ISO 8601 validi. Tuttavia, se sei bloccato con questa particolare rappresentazione, puoi provare DateTime.ParseExact e fornire una stringa di formato.

+3

Cheers ma il wiki mostra entrambi i formati – Kaya

+2

Non ero in grado di analizzare la mia stringa usando "u" o "s", ma la sostituzione di T con uno spazio è facile. Questo sembra funzionare. Sto usando VB .NET con .NET 2.0. –

+0

@romkyns La risposta mi sembra corretta. Dal tuo documento "ISO-8601 standard" ho letto nei capitoli 3.4.3 e 4.3.2 che la "T" è necessaria quando viene mostrata la data e l'ora. Vedi anche esempi B.1.3. E le date in formato come presentate in questione sono gestite in modo nativo. – StefanG

19
string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, "u", System.Globalization.CultureInfo.InvariantCulture); 

La classe DateTime supporta l'standard format string di u per questo formato

Credo che per il formato ISO (con il separatore T), usare "s" al posto di "u". O utilizzare:

string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, new string[] {"s", "u"}, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); 

per supportare entrambi i formati.

Problemi correlati