HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 在Swift中将日期从GMT 1转换为UTC时出现混乱大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当您尝试将“2016-06-23 12:00:00”转换为UTC日期时,我会收到“2016-06-23 10:00:00”

一个日期是GMT 1,我想转换为UTC.如果我没弄错GMT 0 == UTC所以12:00应该是11:00对吗?但我总是得到10点.为什么会这样,我该如何正确转换它?

我在操场上和实际设备上都试过这个

这是我使用的代码

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view,typically from a nib.

    let dateString:string = "2016-06-23 12:00:00"

    print("1: "+dateString)

    print("2: "+convertDateToUTC(dateString))

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func convertDateToUTC(_ dateString:string) -> String {

    let dateForm = DateFormatter()
    dateForm.dateFormat = "yyyy-MM-dd HH:mm:ss"
    dateForm.timeZone = TimeZone(abbreviation: "GMT+1")

    print(TimeZone.current.abbreviation()!)

    let date = dateForm.date(from: dateString)

    dateForm.timeZone = TimeZone(abbreviation: "UTC")

    let date1 = dateForm.String(from: date!)

    return date1

}

}

输出

1: 2016-06-23 12:00:00
GMT+1
2: 2016-06-23 10:00:00

解决方法

简答:将“GMT 1”替换为“GMT 01”.

“GMT 1”不是有效的时区缩写:

let tz = TimeZone(abbreviation: "GMT+1")
 print(tz) // nil

因此,在

dateForm.timeZone = TimeZone(abbreviation: "GMT+1")

你将dateForm.timeZone设置为nil,这意味着日期
String在您的认(本地)时区中解释.

dateForm.timeZone = TimeZone(abbreviation: "GMT+01")

你会得到预期的结果.或者,创建时区
从(数字)GMT偏移量或其标识符:

dateForm.timeZone = TimeZone(secondsFromGMT: 3600)
dateForm.timeZone = TimeZone(identifier: "GMT+0100")

附录(回应您的意见):

TimeZone(identifier: "GMT+0100") 
TimeZone(identifier: "Europe/Berlin")

是不同的时区.第一个使用固定的GMT偏移量为1小时,第二个是区域中的时区(在本例中为德国),并且与UTC相差一到两个小时,具体取决于是否夏令时在指定日期有效.

大佬总结

以上是大佬教程为你收集整理的ios – 在Swift中将日期从GMT 1转换为UTC时出现混乱全部内容,希望文章能够帮你解决ios – 在Swift中将日期从GMT 1转换为UTC时出现混乱所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。