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

6

我使用的是Swift 4.2版本。我正在努力尝试获取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

因为我的当前时区是America/Montreal,所以应该是-5吗?

能有人给我一些提示吗?

2个回答

6
您可以获取当前时区,从 GMT 中获取秒数并将其除以 3600。
TimeZone.current.secondsFromGMT() / 3600    // -3 hs America/Sao_Paulo (current) Brazil

如果你需要更精确的时间,比如小时的分数,请在除法之前将其转换为double类型。

1

它应该是-0500

从维基百科页面

它有4个数字而不是一个,是因为它采用24小时制,一些时区距离UTC的距离是半小时。


有没有办法以“-5”的格式获取它?我的后端API只接受“-12”到“12”的范围。我无法更改它。 - code-8
@kyo 你的API是否处理与UTC相差不到一小时的时区? - rmaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接