我正试图从System.TimeZone
获取时区的长名称。这就是我试图这样做的方式:
Console.WriteLine(System.TimeZone.CurrentTimeZone.DaylightName);
我进入控制台的结果是
EST
但我需要的是长名称:
东部标准时间
我查看了C#文档(http://msdn.microsoft.com/en-us/library/system.timezone.currenttimezone(v=vs.110).aspx)并注意到.Net库正在返回我需要的内容但由于某种原因Xamarin(mono)只是给了我缩写。
有办法吗?
答案 0 :(得分:1)
在一天结束的时候,我经历了很多痛苦来解决这个问题,并最终在网络和 > android或设备:
private TimeZoneInfo ConvertTimeZone(string timeZoneString)
{
ReadOnlyCollection<TimeZoneInfo> timeZoneInfos = TimeZoneInfo.GetSystemTimeZones();
if (Regex.IsMatch(timeZoneString, "[A-Z]{3,5}[0-9]{0,2}") && !Regex.IsMatch(timeZoneString, "[A-Z]{3,5}[-]{1}[0-9]{0,2}"))
{
List<string> abbreviations = new List<string>();
// create the list of abbreviations for TimeZoneInfos
timeZoneInfos.ToList().ForEach(
x =>
{
if (!Regex.IsMatch(x.StandardName, "[A-Z0-9]{3,4,5}"))
{
string fullString = x.StandardName.Replace(" ", string.Empty);
string[] split = Regex.Split(fullString, "[a-z]|[()-.]");
abbreviations.Add(string.Concat(split));
}
});
return timeZoneInfos[abbreviations.IndexOf(timeZoneString)];
}
else
{
return timeZoneInfos.Where(x => x.StandardName == timeZoneString).First();
}
}
这样做的目的是使用正确的时区在地图上显示我的数据,并且这样做了。
警告:这可能适用于大多数北美时区,但我无法保证它能在全球范围内发挥作用。 Windows确实有102个时区,我刚刚测试了几个。我基本上创建了一个缩写地图。
答案 1 :(得分:1)
我知道它有点老了,但对于那些需要使用时区名称的人来说
Java.Util.TimeZone.Default.ID
这将给出时区名称。