我正在尝试从System.TimeZone
获取时区的长名称。这就是我尝试这样做的方式:
Console.WriteLine(System.TimeZone.CurrentTimeZone.DaylightName);
我在控制台中得到的结果是
最
但我需要的是长名称:
东部标准时间
我查看了C#文档(http://msdn.microsoft.com/en-us/library/system.timezone.currenttimezone(v=vs.110).aspx),并注意到.Net库正在返回我需要的内容,但由于某种原因,Xamarin(mono)只是给了我缩写。
有没有办法解决这个问题?
归根结底,我经历了很多痛苦才弄清楚这一点,最终在网络上而不是在 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个时区,我刚刚测试了一些。我基本上创建了一个缩写地图。
它有点旧,但对于那些需要获取时区名称的人来说,请使用
Java.Util.TimeZone.Default.ID
这将给出时区名称。