C# 如何获取TimeZoneInfo短名称
有什么方法可以从中获取3个字符的代码吗 System.TimeZoneInfo.Local ?C# 如何获取TimeZoneInfo短名称,c#,.net,vb.net,datetime,date,C#,.net,Vb.net,Datetime,Date,有什么方法可以从中获取3个字符的代码吗 System.TimeZoneInfo.Local ? e、 g.EDT而不是东部夏时制等。不幸的是,据我所知,没有一种简单的内置方法可以做到这一点。然而,你可以自己做一些事情。下面是一个例子: public static class TimeZoneInfoExtensions { public static string Abbreviation(this TimeZoneInfo Source) { var Map
e、 g.EDT而不是东部夏时制等。不幸的是,据我所知,没有一种简单的内置方法可以做到这一点。然而,你可以自己做一些事情。下面是一个例子:
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();
}
}
如果需要更多转换,可以将它们插入地图字典
TimeZoneInfo.Id将是与[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZones]中给定密钥匹配的字符串。如果您可以在线找到一个匹配的数据库,其中包含相同的ID和缩写,那么就可以快速提取和导入带有正则表达式的对,例如,并将它们放入地图字典中。您可以编写如下内容:
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);
}
}
Id的可能值可在HKEY\U LOCAL\U MACHINE\Software\Microsoft\Windows NT\CurrentVersion\timezone下的注册表中找到。它们与其中的名称不同。应该注意的是,不能仅通过时区信息来确定日光。例如,按照建议查看注册表,您可以看到所有名称仅包括Standard而不包括Daylight。因此,你不会有一个准确的答案,考虑到日光而不涉及某个地方的日期时间。
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);
}
}