【问题标题】:NSTimezone get abbreviation from timezoneIdNSTimezone 从 timezoneId 获取缩写
【发布时间】:2013-12-06 12:46:12
【问题描述】:

在我的 IOS 应用程序中,我有一个类似“America/Los_Angeles”的时区 ID,我想获得它的缩写“PST”。

我写了以下代码:

NSTimeZone* theTimezone = [NSTimeZone timeZoneWithName:_timezone];
    _timezoneAbbreviation = theTimezone.abbreviation;

我的问题是_timezoneAbbreviation 总是返回一个类似“UTC-x”或“UTC+x”的字符串,而不是适当的缩写。

如果我正在查看 [NSTimeZone abbreviations] 返回的 NSDictionary,它包含正确的缩写(例如 PST 表示“America/Los_Angeles”)。

有什么想法吗?

塞巴斯蒂安。

【问题讨论】:

  • 注意时区缩写。在夏天,您可能需要 PDT 而不是 PST 用于同一 America/Los_Angeles 区域。对于像CST 这样的缩写,还有many ambiguities
  • 应该由 NSTimeZone 管理 -> Extract from Apple Doc "请注意,不同日期的缩写可能不同。例如,在夏令时,美国/东部时区的缩写为“美东时间。”在其他时候,它的缩写是“EST”。”
  • 当然可以,但是您需要以某种方式指明日期以用作做出该决定的依据。您可以在某个特定时间(例如现在或上个月等)要求时区缩写,但我看不出它如何正确猜测。

标签: ios cocoa-touch timezone


【解决方案1】:

abbreviation 方法的结果似乎取决于语言环境。如果我将区域格式设置为“美国”,那么您的代码实际上会返回“PST”。如果我将区域格式设置为“德国/德语”,它将返回“GMT-8”(在 iOS 模拟器上测试)。

但是

[theTimezone localizedName:NSTimeZoneNameStyleShortStandard
                    locale:[NSLocale localeWithLocaleIdentifier:@"en_US"]]

给出“PST”,与区域格式无关。

(我知道这只是部分解决方案。它只返回所需的结果 对于美国时区。但也许它指向了解决问题的正确方向 问题。)

【讨论】:

  • 好答案!我会在这个方向上进行更多调查。
  • 一种自定义解决方案是使用其默认缩写字典并从中找出特定的缩写。 [NSTimezone 缩写字典];
【解决方案2】:

直接使用字典。或者创建自己的字典,以便完全控制它。

【讨论】:

  • 我可以这样做,但从 Apple 文档中该方法 - (NSString *)abbreviation 应该返回“PST”...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多