在 Swift 中获取时区缩写

Getting timezone abbreviations in Swift

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

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

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

这是因为时区缩写对区域设置敏感。 IST 在印度仅表示印度标准时间 (Asia/Kolkata)。在世界其他地方,它可能表示以色列标准时间或爱尔兰 Standard/Summer 时间。这里有一个 site 显示缩写列表。你可以亲眼看看它们有多模糊。

这就是为什么,即这个设置:

abbreviation() 如果您的设备所在地区是印度,则给您“IST”。如果您的 phone 在其他地方,它会显示“GMT+5:30”,因为这是最安全、最明确的选项。

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

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

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