Tengo un escenario en el que tengo un desplazamiento de zona horaria (en minutos) y necesito determinar la zona horaria para él. Sé que todos los datos no están disponibles (por ejemplo, puede haber varias zonas horarias con un desplazamiento de -240 minutos), pero una "mejor conjetura" es aceptable.¿Cómo puedo determinar una zona horaria por el desplazamiento UTC?
Mi primer paso era la siguiente:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Este sorta funciona, pero tengo que dar cuenta de los cambios de horario que me está arrojando un poco. He añadido esta terrible truco:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
var extra = info.IsDaylightSavingTime(DateTime.Now) ? 60 : 0;
if (info.BaseUtcOffset.TotalMinutes + extra == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Esto funciona "bastante bien" en el que puedo mostrar al usuario el tiempo correcto para ellos cuando no es el horario de verano, en efecto, y estoy cerca del 70% correcta durante el horario de verano. Aún así ... este es un código horrible para mis ojos.
¿Hay una mejor manera de hacerlo? Más elegancia sería buena, y más precisión sería aún mejor.
actualización
Técnicamente tengo acceso a cualquier información Javascript puede obtener con respecto a la fecha. Tengo una página en la que coloqué un campo oculto llamado "desplazamiento". Tengo una función JQuery que rellena el campo de desplazamiento con DateTime(). GetTimezoneOffset(). Si bien no veo nada en el objeto DateTime que pueda ayudar, quizás esto abra otras vías para obtener ideas.
@Sailing Judo: He agregado un código a mi respuesta, que permite a Javascript convertir una marca de tiempo universal en una local. – Kip