如何获取UTC和iPhone-Swift 4.2之间的时区偏移?

时间:2019-02-25 22:51:19

标签: swift timezone timezone-offset

我正在使用 Swift 4.2 。我正在努力尝试从iPhone取得UTC与UTC之间的偏移时间。


我有此代码

extension TimeZone {
    func offsetFromGMT() -> String
    {
        let localTimeZoneFormatter = DateFormatter()
        localTimeZoneFormatter.timeZone = self
        localTimeZoneFormatter.dateFormat = "Z"
        return localTimeZoneFormatter.string(from: Date())
    }
}

func getCurrentTimeZone() -> String{
    return String (TimeZone.current.identifier)
}


var tzOffset = ""
let currentTimeZone = getCurrentTimeZone()
TimeZone.knownTimeZoneIdentifiers.forEach({ timeZoneIdentifier in
    if let timezone = TimeZone(identifier: timeZoneIdentifier)
    {
        //print("\(timezone.identifier) \(timezone.offsetFromGMT())")

        if(timezone.identifier == currentTimeZone){
            tzOffset = timezone.offsetFromGMT()
        }
    }
})

结果

如果我这样做

print(tzOffset)

我知道了

-0500

由于我的currentTimeZone是-5,应该是America/Montreal吗?

有人可以给我提示吗?

2 个答案:

答案 0 :(得分:1)

应为-0500

From the Wikipedia page

之所以用4位数字而不是1位数字,是因为它采用24小时格式,并且某些时区是在距UTC半小时的距离内测量的

答案 1 :(得分:1)

您可以获取当前时区,从格林尼治标准时间获取秒数,然后将其除以3600。

TimeZone.current.secondsFromGMT() / 3600    // -3 hs America/Sao_Paulo (current) Brazil