第一个日期是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:00GMT+12: 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时出现混乱所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)