【问题标题】:Getting timezone abbreviations in Swift在 Swift 中获取时区缩写
【发布时间】:2021-02-09 09:08:14
【问题描述】:

我正在尝试使用以下代码检索本地时区的时区缩写。

private func getLocalTimezone() -> String {
   guard let localTimezone =  TimeZone.current.abbreviation() else {
     return ""
   }
   return localTimezone
 } 

但是当我在印度时区时,我总是得到 GMT+5:30,我需要它作为 IST。当我在 CST 或 PST 时,它会正确出现。任何人都可以建议一种方法来解决这个问题。 提前非常感谢

【问题讨论】:

    标签: swift nstimezone


    【解决方案1】:

    这是因为时区缩写对区域设置敏感。 IST 仅表示印度的印度标准时间 (Asia/Kolkata)。在世界其他地区,它可能意味着以色列标准时间或爱尔兰标准/夏令时间。这是一个site,它显示了缩写列表。你可以亲眼看到它们有多么模棱两可。

    这就是为什么abbreviation() takes into account the region of your phone,即这个设置:

    如果您的设备所在地区是印度,

    abbreviation()给您“IST”。如果您的手机在其他地方,它会显示“GMT+5:30”,因为这是最安全、最明确的选项。

    如果您希望无论您的设备在哪里都输出 IST,您需要通过将时区标识符字典创建为您想要的缩写来对其进行硬编码。有一个内置的abbreviationDictionary 则相反——标识符的缩写。您可以搜索它,它适用于 IST (Asia/Kolkata),但可能不适用于您感兴趣的任何其他时区。

    let abbreviation = TimeZone.abbreviationDictionary
        .first(where: { $1 == TimeZone.current.identifier })?.key
    

    我不确定这本词典的内容是否会在未来的 iOS 版本中保持不变。使用它需要您自担风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      相关资源
      最近更新 更多