¿Hay algún método para obtener el código de 3 caracteres de System.TimeZoneInfo.Local ?cómo obtener el nombre abreviado de TimeZoneInfo
p. Ej. EDT en lugar de horario de verano del Este, etc.
¿Hay algún método para obtener el código de 3 caracteres de System.TimeZoneInfo.Local ?cómo obtener el nombre abreviado de TimeZoneInfo
p. Ej. EDT en lugar de horario de verano del Este, etc.
Desafortunadamente, no hay una forma fácil de hacerlo, que yo sepa. Sin embargo, podrías armar algo tú mismo. He aquí un ejemplo:
public static class TimeZoneInfoExtensions {
public static string Abbreviation(this TimeZoneInfo Source) {
var Map = new Dictionary<string, string>()
{
{"eastern standard time","est"},
{"mountain standard time","mst"},
{"central standard time","cst"},
{"pacific standard time","pst"}
//etc...
};
return Map[Source.Id.ToLower()].ToUpper();
}
}
uso de la siguiente manera:
string CurrentTimeZoneAbbreviation = System.TimeZoneInfo.Local.Abbreviation();
Si usted necesita más conversiones que sólo les podía conectar en el diccionario del mapa.
TimeZoneInfo.Id será una cadena que coincida con una clave determinada en [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones]. Si puede encontrar una base de datos coincidente en línea, que contenga los mismos ID y las abreviaturas, sería posible extraer e importar rápidamente los pares (con expresiones regulares, por ejemplo) y soltarlos en el diccionario de mapas.
Los valores posibles para 'Id' se pueden encontrar en el registro en' HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zone' (son diferentes de los nombres en http://www.timeanddate.com/library/abreviaturas/zonas horarias /) – dtb
@dtb: Gracias. –
Puede escribir algo como:
var abbr = System.TimeZoneInfo.Local.TimeZoneAbbr();
y el ayudante para ello:
public static class ConvertionHelper
{
public static String TimeZoneAbbr(this TimeZoneInfo zone)
{
var zoneName = zone.Id;/* zone.IsDaylightSavingTime(DateTime.UtcNow)
? zone.DaylightName
: zone.StandardName;*/
var zoneAbbr = zoneName.CapitalLetters();
return zoneAbbr;
}
public static String CapitalLetters(this String str)
{
return str.Transform(c => Char.IsUpper(c)
? c.ToString(CultureInfo.InvariantCulture)
: null);
}
private static String Transform(this String src, Func<Char, String> transformation)
{
if (String.IsNullOrWhiteSpace(src))
{
return src;
}
var result = src.Select(transformation)
.Where(res => res != null)
.ToList();
return String.Join("", result);
}
}
Cabe señalar que no se puede determinar simplemente la luz del día o no de la información sólo una zona horaria. Por ejemplo, mirando el registro como se sugiere, uno puede ver que todos los nombres solo incluyen "Estándar" y no "Luz del día". Por lo tanto, no tendrá una respuesta precisa (que tenga en cuenta la Luz del día) sin incluir un DateTime en algún lugar. – user420667