2012-08-08 41 views
10

Tengo un string s = "May 16, 2010 7:20:12 AM CDT que quiero convertir en un objeto DateTime. En el siguiente código, obtengo un error de formato de fecha no se puede convertir al intentar analizar el texto con un formato conocido.Cadena de formato a fecha y hora con zona horaria

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

La zona horaria viene como CDT UTC ... y creo que es lo que está causando el problema o mi formato?

+0

¿Qué 'var dt = DateTime.ParseExact (s , "MMM dd, aaaa H: mm: ss tt 'CDT'", nulo); '? – Vlad

Respuesta

7

Central Daylight Time

Prueba esto:

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:

Para el horario de verano y por que no DateTime.IsDaylightSavingTimeTimeZone.CurrentTimeZone

Custom Date and Time Format Strings

+1

¿Qué sucede si CDT tiene horario de verano y se convierte en -4? – Greg

+0

Agregado a la respuesta – rumburak

+0

donde encuentro la información sobre los juegos fuera de horario y Timezone, también puedo obtener CST como zona horaria y necesito reemplazar y manejar el horario de verano. – Warz

3

Asegúrese el DateTime es inequívocamente DateTimeKind.Utc. Evite "GMT", es ambiguo para el horario de verano.

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"); 

es da salida: Dec 31 de, 2010 19:01:01 pm GMT-06: 00

Para más detalles consulte este Link

+0

Es correcto usar UTC porque es el estándar internacional, pero GMT no es ambiguo para el horario de verano. GMT siempre es UTC + 0. El Reino Unido cambia a BST durante el verano. Más información en http://www.differencebetween.com/difference-between-gmt-and-utc/ – thelem

Cuestiones relacionadas