【问题标题】:Cannot get TimeZone to show long name instead of abbreviation (Xamarin Android)无法让 TimeZone 显示长名称而不是缩写(Xamarin Android)
【发布时间】:2014-05-15 20:54:40
【问题描述】:

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

有办法解决吗?

【问题讨论】:

  • 我在 iOS 中得到了同样的结果。我建议提交一个错误:bugzilla.xamarin.com
  • 谢谢@Jason!我刚刚报告了它......同时我正在寻找一个无故障的解决方法:)
  • 您在寻找人类可读的显示名称吗?或者您是否正在寻找时区 ID 以传回服务?
  • @MattJohnson 人类可读。我已经找到了使用 TimeZoneInfo 的解决方案,我将在明天发布答案。
  • @P.Sami 我目前遇到了这个问题 - 你报告了这个错误吗?

标签: c# android timezone xamarin.android xamarin


【解决方案1】:

我知道它有点旧,但对于那些需要获取时区名称的人来说

Java.Util.TimeZone.Default.ID

这将给出时区名称。

【讨论】:

    【解决方案2】:

    在一天结束时,我经历了很多痛苦才弄清楚这一点,最终在 WebNOT 上找到了一个转换器>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 个时区,我只是测试了一些。我基本上为缩写创建了一张地图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2023-03-09
      • 2017-06-18
      相关资源
      最近更新 更多