如何使UTC和iPhone之间的时区抵消-Swift 4.2



我在 swift 4.2 上。我正在努力尝试在iPhone中获得UTC和iPhone的偏移时间。


我有这个代码

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

应该是-5,因为我的CurrentTimeZone是America/Montreal

有人可以给我提示吗?

您可以获取当前时区,从GMT获取秒数并将其除以3600。

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

如果您需要更精确的时间,例如小时的分数,只需将其转换为duble。

应该是 -0500

从Wikipedia页面

它具有4位数字而不是一位数字的原因是因为它是24小时格式的,并且在距UTC半小时距离

的距离半小时距离时。

最新更新