在Swift中获取时区缩写

在Swift中获取时区缩写,swift,nstimezone,Swift,Nstimezone,我正在尝试使用以下代码检索本地时区的时区缩写 private func getLocalTimezone() -> String { guard let localTimezone = TimeZone.current.abbreviation() else { return "" } return localTimezone } 但当我在印度时区时,我总是得到GMT+5:30,我需要它作为IST。当我在CST或PST时,它会正确出现

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

private func getLocalTimezone() -> String {
   guard let localTimezone =  TimeZone.current.abbreviation() else {
     return ""
   }
   return localTimezone
 } 
但当我在印度时区时,我总是得到GMT+5:30,我需要它作为IST。当我在CST或PST时,它会正确出现。请任何人提出一种方法来解决这个问题。
这是因为时区缩写对语言环境敏感。IST在印度仅指印度标准时间(
Asia/Kolkata
)。在世界其他地区,这可能意味着以色列标准时间,或爱尔兰标准/夏季时间。下面是一个显示缩写列表的示例。你可以亲眼看到它们是多么模棱两可

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

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

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

let abbreviation = TimeZone.abbreviationDictionary
    .first(where: { $1 == TimeZone.current.identifier })?.key
我不确定这本词典的内容在未来的iOS版本中是否会保持不变。使用它的风险自负