2012-08-08 21 views
10

Ho un string s = "May 16, 2010 7:20:12 AM CDT che voglio convertire in un oggetto DateTime. Nel codice qui sotto ottengo un formato data non può essere convertito errore quando si tenta di analizzare il testo con un formato noto.Formato stringa su datetime con fuso orario

timeStamp = matches[0].Groups[1].Value; 
dt = DateTime.ParseExact(timeStamp, "MMM dd, yyyy H:mm:ss tt", null); 

Il fuso orario entra come CDT UTC ... e credo che è che cosa è la causa del problema o il mio formato?

+0

Come su 'var dt = DateTime.ParseExact (s , "MMM gg, aaaa H: mm: ss tt 'CDT'", null); '? – Vlad

risposta

7

Central Daylight Time

Prova questo:

string dts = "May 16, 2010 7:20:12 AM CDT"; 
DateTime dt = 
    DateTime.ParseExact(dts.Replace("CDT", "-05:00"), "MMM dd, yyyy H:mm:ss tt zzz", null); 

EDIT:

Per ora legale perche DateTime.IsDaylightSavingTime e TimeZone.CurrentTimeZone

Custom Date and Time Format Strings

+1

cosa succede se CDT ha ora legale e diventa -4? – Greg

+0

Aggiunto per rispondere a – rumburak

+0

dove trovo le informazioni su off set e Timezone, potrei anche ottenere CST come fuso orario e dover sostituire e gestire l'ora legale. – Warz

3

Assicurarsi il DateTime è inequivocabilmente DateTimeKind.Utc. Evitare "GMT", è ambiguo per l'ora legale.

var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc); 
    string s = dt.ToLocalTime().ToString("MMM dd, yyyy HH:mm:ss tt \"GMT\"zzz"); 

è dà uscita: 31 Dicembre 2010 19:01:01 GMT-06: 00

Per maggiori dettagli fare riferimento questo Link

+0

È corretto usare UTC perché è il standard internazionale, ma GMT non è ambiguo per l'ora legale. GMT è sempre UTC + 0. Il Regno Unito passa a BST durante l'estate. Maggiori informazioni su http://www.differencebetween.com/difference-between-gmt-and-utc/ – thelem

Problemi correlati