2009-09-28 13 views
5

Come convertire la stringa "28/09/2009" in DateTime in un formato specifico? Es: Voglio convertire "2009-09-28 17:30:40" a DateTime. Voglio convertire "28/09/2009 17:30:40" a DateTime. Voglio convertire "20090928 17:30:40" a DateTime.Come convertire una stringa in un formato DateTime specifico in C#?

Esistono più formati possibili. Ho provato questo:

string[] formats = new string[] {"yyyymmdd","yyyymmddThhmmss","yyyy/mm/dd hh:mm:ss","yyyy/mm/dd","yyyy-mm-dd hh:mm:ss","yyyy-mm-dd"}; 
IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime formattedDate = DateTime.ParseExact(aDate, formats, culture, DateTimeStyles.None); 

Questo esempio genera un'eccezione con il messaggio "Stringa non è stato riconosciuto come un DateTime valido".

Cosa c'è di sbagliato nel codice sopra?

+0

Falai Brazuca! :) Puoi darci qualche informazione in più sul tuo scenario? Ricevi date in tutti e tre i formati con lo stesso contesto? –

+0

Fala aí .... Ho bisogno di leggere un documento xml. In questo documento ci sono stringhe che rappresentano le date. Ma queste date possono essere in più formati. Devo identificare questi formati e convertire le stringhe in DateTime. –

risposta

12

Nessuno dei tuoi formati inserisce prima il giorno, ad esempio "dd/MM/yyyy".

Si noti inoltre la "M" maiuscola, poiché la lettera minuscola "m" è per "minuti". Hai un problema simile con le tue ore; dal momento che i tuoi campioni utilizzano tutte le 24 ore, hai bisogno di una "H" maiuscola.

Il formato di array di stringhe dovrebbe assomigliare a questa:

string[] formats = {"dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "yyyyMMdd HH:mm:ss"}; 

Quei formati esattamente corrispondono ai suoi stringhe di esempio in dotazione.

Inoltre, probabilmente si desidera utilizzare la cultura invariabile anziché en-US in questo caso. Altrimenti, il carattere '/' nelle stringhe di formato è in realtà un separatore di date specifico per la cultura, che un utente potrebbe scavalcare sul proprio sistema locale. Infine, dal momento che ovviamente stai riscontrando problemi nel trovare le stringhe, potresti usare TryParseExact(), che funziona esattamente come parse esatto ma usa un parametro out piuttosto che restituire il valore, in modo che possa restituire un valore booleano per indicare il successo o il fallimento piuttosto che lanciare un'eccezione.

Vedere la stringa completa di riferimento formato qui:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Problemi correlati