gpt4 book ai didi

swift - 从 timeZoneOffset 字符串创建 TimeZone 对象?

转载 作者:行者123 更新时间:2023-11-28 11:29:15 26 4
gpt4 key购买 nike

什么是初始化 Swift 的干净方法 TimeZone来自 timeZoneOffset 字符串的对象,格式为:“+HH:MM”。

我正在寻找以下形式的内容:

extension TimeZone {

init?(UTCOffsetString ofs: String) {

let signIndex = ofs.firstIndex(of: "+") ?? ofs.firstIndex(of: "-")
let sign = ofs[signIndex!]

let separatorIndex = ofs.firstIndex(of: ":")!

let hhRange = ofs.index(signIndex!, offsetBy: 1)..<separatorIndex
let hh = ofs[hhRange]

let mmRange = ofs.index(separatorIndex, offsetBy: 1)..<ofs.index(separatorIndex, offsetBy: 3)
let mm = ofs[mmRange]

var offsetInMin = (Int(String(hh))! * 60) + Int(String(mm))!
if sign == "-" {
offsetInMin.negate()
}

let offsetInSec = offsetInMin * 60
// Convert string to TimeZone, eg.
self.init(secondsFromGMT: offsetInSec)
}

}

let tz = TimeZone.init(UTCOffsetString: "-07:30")
print(tz?.identifier ?? "unknown")

上面的代码块是一个正确的解决方案并打印:

GMT-0730

不过,我正在寻找一种更简洁的解决方案,我不需要提取子字符串来计算偏移量。

最佳答案

我的建议是使用能够解析时区字符串格式的DateFormatterrefZoneString 是对当前时区 UTC 的引用。

extension TimeZone {

init?(UTCOffsetString ofs: String) {
let refZoneString = "+0000"
let formatter = DateFormatter()
formatter.dateFormat = "Z"
guard let refDate = formatter.date(from: refZoneString),
let date = formatter.date(from: ofs) else { return nil }
self.init(secondsFromGMT: Calendar.current.dateComponents([.second], from: date, to: refDate).second!)
}
}

let tz = TimeZone.init(UTCOffsetString: "-07:30")
print(tz?.identifier ?? "unknown")

关于swift - 从 timeZoneOffset 字符串创建 TimeZone 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57290898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com