2012-04-24 15 views
7

Quiero formatear la cadena: "2012-04-20 10: 10: 00 + 0200" a una fechaTiempo con este formato. , así que creo que debe ser "aaaa-MM-dd hh: mm: ss zzz"?C# string to DateTime with timezone

cuando probé esta

// starttime = {20/04/2012 10:10:00} without my +0200! 
DateTime starttime = Convert.ToDateTime("2012-04-20 10:10:00+0200",CultureInfo.CurrentCulture); 
// And this gave me a format exception : {System.FormatException: String was not recognized as a valid DateTime. 
     DateTime result = DateTime.ParseExact("2012-04-20 10:10:00+0200", "yyyy-MM-dd hh:mm:ss zzz", CultureInfo.InvariantCulture); 

solución dada por "V4Vendetta":

debería intentar usar DateTimeOffset en lugar del DateTime

DateTimeOffset result = DateTimeOffset.Parse("2012-04-20 10:10:00+0200",CultureInfo.InvariantCulture); 

aquí se obtiene el desplazamiento (2 hrs) también que podría ser calculado con su valor de DateTime (10:10) y obtener su salida deseada (result.DateTime + result.Offset)

+1

Eche un vistazo aquí: [link] (http://stackoverflow.com/questions/8754563/parse-string- datetime-containing-timezone-info) – Willem

+1

Según mi conocimiento su entrada debe ser "2012-04-20 10: 10: 00 + 02: 00" – Ramesh

+0

@Schaliasos beter? :) – user1264255

Respuesta

22

debería intentar usar DateTimeOffset en lugar de la DateTime

DateTimeOffset result = DateTimeOffset.Parse("2012-04-20 10:10:00+0200",CultureInfo.InvariantCulture); 

Aquí puede obtener los Offset (2 horas) también, lo cual puede ser calculada con su DateTime (10:10) valor y obtenga su salida deseada (result.DateTime + result.Offset)

+0

¡Gracias! votaría, pero aún no puedo – user1264255

+0

¡Feliz! debe intentar marcar como respuestas todas sus preguntas * que lo ayudaron * y alentar a los demás. – V4Vendetta

+0

¡Qué cosa tan útil tener! – Keerigan

1

El artículo here de MSDN parece tener exactamente lo que está buscando. Por dicho artículo, usted debe utilizar {0:MM/dd/yy H:mm:ss zzz}

1

uso "2012-04-20 10:10:00 02: 00" en lugar de " "2012-04-20 10: 10: 00 + 0200"

+0

luego recibí el mismo cuando acabo de convertirme a datetime . resultado: // starttime = {20/04/2012 10:10:00} sin mi +0200 – user1264255

+0

Ya debería estar en la zona horaria +02: 00. Compruebe por toString ("aaaa-MM-dd hh: mm: ss zzz") –

+0

Correcto, pero realmente lo necesitaba en DateTime. V4Vendetta me ha dado la solución correcta. Pero aún gracias por su ayuda :) – user1264255

0

Prueba esto:

DateTime datetime = DateTime.ParseExact("10/10/2009 12:00:00", "MM/dd/yyyy hh:mm:ss", System.Globalization.CultureInfo.CurrentCulture);