无法让TimeZone显示长名而不是缩写(Xamarin Android)

时间:2014-04-03 19:52:26

标签: c# android timezone xamarin.android xamarin

我正试图从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)只是给了我缩写

有办法吗?

2 个答案:

答案 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

这将给出时区名称。