Tengo un problema extraño que parece que no puedo resolver. Cuando llamo al TimeZoneInfo.GetSystemTimeZones
en mi máquina Win 7 x64 obtengo 101 resultados. Cuando llamo al TimeZoneInfo.FindSystemTimeZoneById
en cada uno de estos y paso el atributo StandardName del objeto TimeZoneInfo, 3 de ellos arrojan TimeZoneNotFoundException.¿Por qué algunas zonas horarias devueltas por GetSystemTimeZones no encontradas por FindSystemTimeZoneById?
He aquí una muestra:
var tzs = TimeZoneInfo.GetSystemTimeZones();
foreach (var timeZoneInfo in tzs.OrderBy(t => t.BaseUtcOffset))
{
try
{
TimeZoneInfo.FindSystemTimeZoneById(timeZoneInfo.StandardName);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine(timeZoneInfo.DisplayName + "|" + timeZoneInfo.StandardName + "|" + timeZoneInfo.BaseUtcOffset);
}
}
Console.ReadLine();
Esto tiene problemas para encontrar "tiempo universal coordinado", "Jerusalén Standard Time" y "Península de Malaca hora estándar". Tomando un caso como Malasia, que se puede ver una entrada para que cuando miro a las zonas horarias disponibles en mi configuración regional, a pesar de que está mostrando el atributo DisplayName en lugar de la StandardName:
Sin embargo, no puedo no lo puede ver con ninguno de los dos nombres cuando navega por el registro en HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones
¿Qué está pasando aquí? ¿Por qué no se puede cargar la zona horaria de Malasia por su nombre?
Por favor, no hay implementaciones alternativas de zonas horarias utilizando otras bibliotecas - Solo quiero llegar al fondo de este tema por ahora. ¡Gracias!
Tan extraño como mi código se ve en retrospectiva (es decir, omitiendo lo dolorosamente obvio), también es extraño que solo 3 de 101 TZ tengan una ID diferente al nombre estándar. Resulta que Malasia es "hora estándar de Singapur". ¡Aquí tienes! –
@alex ¿Tenemos TimeZoneInfo.ID como una propiedad válida? –