Esiste un metodo per ottenere il codice 3 caratteri da System.TimeZoneInfo.Local ?come ottenere il nome breve TimeZoneInfo
ad es. EDT invece di Eastern Daylight time ecc.
Esiste un metodo per ottenere il codice 3 caratteri da System.TimeZoneInfo.Local ?come ottenere il nome breve TimeZoneInfo
ad es. EDT invece di Eastern Daylight time ecc.
Sfortunatamente, non c'è un modo semplice integrato di fare ciò che io conosca. Tuttavia, potresti mettere insieme qualcosa da te. Ecco un esempio:
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();
}
}
Usa come segue:
string CurrentTimeZoneAbbreviation = System.TimeZoneInfo.Local.Abbreviation();
Se avete bisogno di più conversioni si può solo collegarli dizionario Map.
TimeZoneInfo.Id sarà una stringa che corrisponde a una chiave specificata in [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Fusi orari]. Se è possibile trovare un database online corrispondente, contenente gli stessi ID e le abbreviazioni, sarebbe possibile estrarre e importare rapidamente le coppie (con espressioni regolari, ad esempio) e rilasciarle nel dizionario Mappa.
I possibili valori di 'Id' si trovano nel registro sotto' HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Fuso orario '(sono diversi dai nomi in http://www.timeanddate.com/library/abbreviazioni/fusi orari /) – dtb
@dtb: Grazie. –
È possibile scrivere qualcosa di simile:
var abbr = System.TimeZoneInfo.Local.TimeZoneAbbr();
E l'assistente per esso:
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);
}
}
Va notato che non si può solo determinare la luce del giorno o meno da solo un fuso orario informazioni. Ad esempio, guardando il registro come suggerito, si può vedere che tutti i nomi includono solo "Standard" e non "Daylight". Pertanto non avrai una risposta precisa (che tenga conto della luce diurna) senza coinvolgere un DateTime da qualche parte. – user420667