【问题标题】:How to get timezone offset between UTC and iPhone - Swift 4.2?如何获得 UTC 和 iPhone - Swift 4.2 之间的时区偏移?
【发布时间】:2019-07-19 10:19:34
【问题描述】:

我正在使用 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

应该是-5,因为我的currentTimeZone 是America/Montreal 吗?

有人可以给我一个提示吗?

【问题讨论】:

    标签: swift timezone timezone-offset


    【解决方案1】:

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

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

    如果您需要更高的精度,例如小时的分数,只需在除法之前将其转换为双精度即可。

    【讨论】:

      【解决方案2】:

      应该是-0500

      From the Wikipedia page

      它有 4 位而不是 1 位的原因是因为它是 24 小时格式,并且某些时区是在距 UTC 半小时的距离内测量的

      【讨论】:

      • 有没有办法以-5 的格式获取它?我的后端 API 预计只有 -1212。我无权改变它。 ?
      • @kyo 您的 API 是否处理与 UTC 相差一个小时的时区?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 2020-10-21
      • 2017-07-03
      相关资源
      最近更新 更多