Подтвердить что ты не робот

Как получить короткое имя TimeZoneInfo

Есть ли способ получить код 3 char из System.TimeZoneInfo.Local

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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