在 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 的未来版本中是否会保持不变。使用它需要您自担风险。
我正在尝试使用以下代码检索本地时区的时区缩写。
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 的未来版本中是否会保持不变。使用它需要您自担风险。