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



我正在尝试从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

这将给出时区名称。

相关内容

  • 没有找到相关文章

最新更新