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"));
Creo que está buscando la clase TimeZoneInfo
(vea http://msdn.microsoft.com/en-us/library/system.timezoneinfo_members.aspx ). Tiene muchos métodos estáticos para convertir fechas entre zonas horarias.
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.