zona timezoneinfo now horaria findsystemtimezonebyid example cambiar c# datetime

c# - timezoneinfo - datetime para encadenar con la zona horaria



timezoneinfo c# example (5)

Tengo un DateTime almacenado en tiempo universal (UTC) de valor 2010-01-01 01:01:01 .

Me gustaría mostrarlo en EST en este formato 2010-01-01 04: 01: 01GMT-04: 00 , sin embargo, el formateador ''K'' para la zona horaria no funciona en ToString


Algo como esto funciona. Probablemente puedas limpiarlo un poco más:

string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K"));



Este método devolverá la hora especificada en Eastern Standard Time (como la pregunta solicitada), incluso si EST no es la zona horaria local :

public string GetTimeInEasternStandardTime(DateTime time) { TimeZoneInfo easternStandardTime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); DateTimeOffset timeInEST = TimeZoneInfo.ConvertTime(time, easternStandardTime); return timeInEST.ToString("yyyy-MM-dd hh:mm:ss tt/" GMT/"zzz"); }

Nota: No he probado esto en un sistema operativo que no sea en inglés. Consulte la documentación de MSDN en TimeZoneInfo.FindSystemTimeZoneById .


Si, como yo, necesitas un formato como 2018-03-31T01:23:45.678-0300 (sin dos puntos en la parte de la zona horaria), puedes usar esto:

datetime.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz").Remove(26,1)


Use el especificador de formato "zzz" para obtener el desplazamiento UTC. Por ejemplo:

var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc); string s = dt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss /"GMT/"zzz"); Console.WriteLine(s);

Salida: 2009-12-31 19:01:01 GMT-06: 00

Estoy en la zona horaria CDT. Asegúrese de que DateTime sea inequívocamente DateTimeKind.Utc.