首页 > 解决方案 > 如何在 iOS 中转换时区格式?

问题描述

我得到了像这样的 GMT+5:30 时区格式。

TimeZone.current.abbreviation(), this will return string value like: //GMT+5:30

  但我需要将上述格式转换为 Asia/Kolkata

如何解决这个问题?

标签: iosswifttimezone

解决方案


而不是调用:

TimeZone.current.abbreviation()

称呼:

TimeZone.current.identifier

在你的情况下,你会得到Asia/Kolkata而不是GMT+5:30.

但是让我们假设您只有一个带有时区缩写的字符串,例如"GMT+5:30". 您无法轻松地将其转换为特定的时区标识符,因为在给定的时间偏移处可能有多个时区。

这是一个小函数,它从缩写字符串创建一个时区,然后找到所有具有相同偏移量的匹配时区标识符。

func matchingTimeZones(abbreviation: String) -> [TimeZone]? {
    if let tz = TimeZone(abbreviation: tzstr) {
        return TimeZone.knownTimeZoneIdentifiers.compactMap { TimeZone(identifier: $0) }.filter { $0.secondsFromGMT() == tz.secondsFromGMT() }
    } else {
        return nil
    }
}

您可以通过以下方式获取匹配列表"GMT+5:30"

let matches = matchingTimeZones(abbreviation: "GMT+5:30")

如果您打印该结果,您将看到其中一个是"Asia/Calcutta"(在英语语言环境中)。


推荐阅读