2013-10-17 16 views
8

Ho ottenuto un po 'di DateTime-Strings che voglio analizzare in un C# DateTime.Parse ISO 8601 a C# DateTime

2009-06-18 02:10:31.296761+00 
2009-06-18 02:13:34.049145+00 
2009-01-06 23:52:21.510121+00 
2009-06-18 02:17:57.268252+00 
2010-01-22 03:31:26.512496+00 
2009-06-18 01:32:37.930961+00 

Attualmente sto cercando di ottenere il DateTime-Object con la seguente riga di codice:

DateTime.ParseExact(str, "yyyy-MM-dd HH:mm:ss.FFFK", CultureInfo.InvariantCulture, DateTimeStyles.None); 

Ma sto ottenendo sempre uno System.FormatException.

+7

Questo non è conforme agli standard ISO 8601 –

+1

Come commentato da Shaw, questo non è il formato rigorosamente [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601). Lo standard richiede un 'T' nel mezzo piuttosto che uno SPAZIO. Ad esempio, '2009-06-18T02: 10: 31.296761 + 00'. Uno SPAZIO è facoltativamente consentito solo su accordo speciale da parte di entrambe le parti dello scambio di dati, mittente e destinatario. –

risposta

18

Non devi fare niente di eccezionale, un semplice DateTime.Parse opere:

DateTime myDate1 = DateTime.Parse("2009-06-18 02:10:31.296761+00"); 
DateTime myDate2 = DateTime.Parse("2009-06-18 02:10:31.296761+03"); 

Entrambe le linee funzioneranno e le date risultanti prenderete l'offset in considerazione.

Il motivo per cui funziona è che il formato da Lei forniti è uno dei formati datetime standard, in particolare the universal sortable format, non ISO 8601.

ISO 8601 corrisponde al formato roundtrip e utilizza 'T' invece di '' a data separata dal tempo.

+0

Ho riscontrato errori durante l'analisi di una data ISO8601 con il formato roundtrip ('O'). Il formato del roundtrip sembra richiedere una data e un'ora completamente specificate, compresi i secondi frazionari (ad esempio 2006-05-04T00: 00: 00.0000000), – redcalx

Problemi correlati