Есть ли способ получить код 3 char из System.TimeZoneInfo.Local
например. EDT вместо восточного дневного времени и т.д.
Есть ли способ получить код 3 char из System.TimeZoneInfo.Local
например. 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();
}
}
Используйте следующее:
string CurrentTimeZoneAbbreviation = System.TimeZoneInfo.Local.Abbreviation();
Если вам нужно больше конверсий, вы можете просто подключить их в словарь карт.
TimeZoneInfo.Id будет строкой, соответствующей данному ключу в [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones]. Если вы можете найти соответствующую базу данных онлайн, содержащую те же идентификаторы, а также сокращения, можно будет быстро извлечь и импортировать пары (например, с помощью регулярных выражений) и отбросить их в словарь карт.
Вы можете написать что-то вроде:
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);
}
}