如何将时区偏移量设为±hh:mm?

时间:2017-02-14 20:07:01

标签: swift swift3 timezone

我可以通过以下方式获得GMT的偏移秒数:TimeZone.current.secondsFromGMT()

但是,如何将格式设为±hh:mm

4 个答案:

答案 0 :(得分:18)

一些整数运算来获得以小时为单位的偏移量 分:

let seconds = TimeZone.current.secondsFromGMT()

let hours = seconds/3600
let minutes = abs(seconds/60) % 60

格式化打印:

let tz = String(format: "%+.2d:%.2d", hours, minutes)
print(tz) // "+01:00" 

%.2d打印一个带有(至少)两位小数的整数(和前导数字) 必要时为零)。 %+.2d是相同的,但带有+个引号 非负数。

答案 1 :(得分:1)

此处是用于获取时区偏移量差和±hh:mm Swift 4代码

的扩展名
extension TimeZone {

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

    func offsetInHours() -> String
    {

        let hours = secondsFromGMT()/3600
        let minutes = abs(secondsFromGMT()/60) % 60
        let tz_hr = String(format: "%+.2d:%.2d", hours, minutes) // "+hh:mm"
        return tz_hr
    }
}

这样使用

print(TimeZone.current.offsetFromUTC()) // output is +0530
print(TimeZone.current.offsetInHours()) // output is "+05:30"

答案 2 :(得分:0)

Swift 4及以上

extension TimeZone {

    func timeZoneOffsetInHours() -> Int {
        let seconds = secondsFromGMT()
        let hours = seconds/3600
        return hours
    }
    func timeZoneOffsetInMinutes() -> Int {
        let seconds = secondsFromGMT()
        let minutes = abs(seconds / 60)
        return minutes
    }
}

答案 3 :(得分:0)

如果你可以使用Date()

func getCurrentTimezone() -> String {
        let localTimeZoneFormatter = DateFormatter()
        localTimeZoneFormatter.dateFormat = "ZZZZZ"
        return localTimeZoneFormatter.string(from: Date())
    }

将返回“+01:00”格式