【问题标题】:how to get TimeZoneInfo short name如何获取 TimeZoneInfo 短名称
【发布时间】:2010-11-27 00:23:02
【问题描述】:

有什么方法可以获取 3 个字符的代码 System.TimeZoneInfo.Local ?

例如EDT 而不是东部夏令时间等。

【问题讨论】:

  • 应该注意的是,不能仅仅根据时区信息来确定日光。例如,按照建议查看注册表,可以看到所有名称仅包含“标准”而不包含“日光”。因此,如果不涉及某个地方的 DateTime,您将无法获得准确的答案(考虑到 Daylight)。

标签: c# .net vb.net datetime date


【解决方案1】:

你可以这样写:

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);
    }
}

【讨论】:

    【解决方案2】:

    不幸的是,据我所知,没有简单的内置方法可以做到这一点。但是,您可以自己组装一些东西。这是一个例子:

    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();
    

    如果您需要更多转换,您可以将它们插入 Map 字典。

    TimeZoneInfo.Id 将是与 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones] 中给定键匹配的字符串。如果您可以在线找到匹配的数据库,包含相同的 Id 和缩写,就可以快速提取和导入这些对(例如使用正则表达式)并将它们放入 Map 字典中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多