как получить короткое имя TimeZoneInfo - PullRequest
13 голосов
/ 10 сентября 2009

Есть ли способ получить 3-значный код из System.TimeZoneInfo.Local

например. EDT вместо восточного дневного времени и т. Д.

Ответы [ 2 ]

9 голосов
/ 10 сентября 2009

К сожалению, я не знаю простого встроенного способа сделать это. Тем не менее, вы можете собрать что-нибудь сами. Вот пример:

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]. Если вы сможете найти в Интернете подходящую базу данных, содержащую те же идентификаторы и сокращения, можно быстро извлечь и импортировать пары (например, с помощью регулярных выражений) и поместить их в словарь карты.

3 голосов
/ 27 марта 2015

Вы можете написать что-то вроде:

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