Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 超过GMT时时间转换不起作用+;8._Ios_Swift - Fatal编程技术网

Ios 超过GMT时时间转换不起作用+;8.

Ios 超过GMT时时间转换不起作用+;8.,ios,swift,Ios,Swift,我有一个将时间从一个时区转换到另一个时区的函数。如果我通过EST、GMT、GMT+10等,该函数将起作用。但是,如果我通过GMT+8或其他GMT时间,if语句的计算结果将永远不会为true,并且会被忽略,从而返回nil并导致应用程序崩溃 func convertToLocalTime(fromTimeZone tzAbb: String) -> Date? { if let timeZone = TimeZone(abbreviation: tzAbb) { let

我有一个将时间从一个时区转换到另一个时区的函数。如果我通过
EST、GMT、GMT+10等,该函数将起作用。
但是,如果我通过
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
}

GMT+10表示GMT的10小时偏移量。此格式需要在“+”符号后加两个密码,因此基本上GMT+9的正确格式应为GMT+09。这就是为什么您的GMT+1到GMT+9解析不正确,但GMT+10及以上的解析是正确的。
此外,如果出于某种原因还想指定分钟偏移量,您可以在示例中说GMT+1109。

GMT+10表示从GMT开始的10小时偏移量。这种格式需要在“+”符号后加两个密码,因此GMT+9的正确格式基本上是GMT+09。这就是为什么您的GMT+1到GMT+9解析不正确,但GMT+10及以上的解析是正确的。
此外,如果出于某种原因还想指定分钟偏移量,可以在示例GMT+1109中使用。

这确实解决了问题,但新问题是调用
TimeZone.current.缩写()??“”
它将只返回GMT-8。。。有没有办法让它返回两个密码?在我知道解决这个问题的方法之前,我只是使用一个开关盒来检查是否是一个密码而不是将其更改为两个密码来解决这个问题,但新的问题是当您调用
TimeZone.current.缩写()时??“”
它将只返回GMT-8。。。有没有办法让它返回两个密码?在我知道解决方法之前,我只是用一个开关盒来检查它是否是一个密码,而不是把它改成两个密码