是否有任何方法可以获取3个char代码 System.TimeZoneInfo.Local ?
e.g。 EDT而不是东部夏令时等。
答案 0 :(得分:9)
不幸的是,我知道没有简单的内置方式。但是,你可以自己把东西放在一起。这是一个例子:
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();
}
}
使用如下:
string CurrentTimeZoneAbbreviation = System.TimeZoneInfo.Local.Abbreviation();
如果您需要更多转换,只需将它们插入地图字典即可。
TimeZoneInfo.Id将是[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones]中与给定键匹配的字符串。如果您可以在线找到匹配的数据库,包含相同的ID和缩写,则可以快速提取和导入对(例如,使用正则表达式)并将其放入Map字典中。
答案 1 :(得分:3)
你可以这样写:
var abbr = System.TimeZoneInfo.Local.TimeZoneAbbr();
它的帮手:
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);
}
}