Desafortunadamente, actualmente no existe una funcionalidad estándar para hacerlo.
Permite comprobar (utilizando el reflector) cómo funciona el método TimeZoneInfo.FindSystemTimeZoneById(). Solo se necesita uno de los valores del campo s_systemTimeZones:
private static Dictionary<string, TimeZoneInfo> s_systemTimeZones
{
get
{
if (s_hiddenSystemTimeZones == null)
{
s_hiddenSystemTimeZones = new Dictionary<string, TimeZoneInfo>();
}
return s_hiddenSystemTimeZones;
}
set
{
s_hiddenSystemTimeZones = value;
}
}
Este campo almacena todos disponibles TimeZoneInfo-s. Y cuando llamas a FindSystemTimeZoneById (id) simplemente escoge un valor del diccionario prellenado. No sé cuándo se inicializa este diccionario y qué valores usa para la inicialización. Pero chico de this thread dijo que TimeZoneInfo usa los valores del registro: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones
La forma más obvia es crear su propio diccionario de diccionario y llenarlo con valores. Algo como esto:
Dictionary<string, TimeZoneInfo> dictionary = new Dictionary<string, TimeZoneInfo>();
TimeZoneInfo info = new TimeZoneInfo("ID", new TimeSpan(0, 1, 0, 0), "SomeCultureName", "Some Standard Time", "Some Daylight Time", null, true);
dictionary.Add("Some time", info);
Pero hay otro problema: TimeZoneInfo constructor es privado. Por lo tanto, si desea usar la funcionalidad FindSystemTimeZoneById() y ConvertTimeFromUtc(), debe implementarla desde cero. Cree una clase que represente la zona horaria, cree y complete el diccionario de esta clase con información de zonas horarias, etc. ...
No son buenas noticias, lo sé. Pero espero que sea útil para ti :)
Hmm. En realidad, no utilicé la descarga de IANA. Acabo de copiar el contenido de/etc/zoneinfo de la máquina Linux más cercana de nuestra red. Resulta que los archivos IANA están en formato de texto, y debe ejecutarlos a través de un compilador de zona horaria ("zic"). La fuente "zic" también está en la misma página de IANA; pero supongo que es más fácil usar los binarios si tienes una máquina Linux para obtenerlos. –
Aquí hay una [versión en GitHub] (https://github.com/mono/mono/tree/master/mcs/class/System.Core/System). –