我有一个将时间从一个时区转换为另一个时区的功能。如果我传递EST, GMT, GMT+10, etc...
,函数会起作用,但是如果我传递GMT+8
或其他GMT次,则if语句永远不会计算为true并被绕过,从而返回nil并使应用程序崩溃。
func convertToLocalTime(fromTimeZone tzAbb: String) -> Date? {
if let timeZone = TimeZone(abbreviation: tzAbb) {
let targetOffset = TimeInterval(timeZone.secondsFromGMT(for: self))
let localOffeset = TimeInterval(TimeZone.autoupdatingCurrent.secondsFromGMT(for: self))
return self.addingTimeInterval(targetOffset - localOffeset)
}
return nil
}
答案 0 :(得分:2)
GMT + 10表示格林尼治标准时间偏离10小时。这种格式在“+”符号后需要两个密码,因此GMT + 9的格式基本上是GMT + 09。这就是为什么你的GMT + 1到GMT + 9没有被正确解析,但GMT + 10及以上是。 此外,如果您出于某种原因想要指定分钟偏移量,您可以在示例中说GMT + 1109。