2016-03-05 54 views
1

我想解析不包含时区的日期字符串。日期字符串将始终以GMT格式。当我构建一个新的NSDateFormatter时,结果比格林威治标准时间早3小时,当我将日期格式化程序中的timeZone设置为GMT时,它会在3小时后显示出来。我究竟做错了什么?NSDateFormatter解析时区

这里有一个快速操场演示问题:

import Foundation 
let formatter = NSDateFormatter() 
formatter.dateFormat = "M/d/yyyy H:mm:ss a" 
let date1 = formatter.dateFromString("2/8/2016 3:43:32 PM")! 
formatter.timeZone = NSTimeZone(name: "GMT")! 
let date2 = formatter.dateFromString("2/8/2016 3:43:32 PM")! 
print("Expect: 2016-02-08 15:43:32 +0000") 
print("Got: \(date1)") 
print("  \(date2)") 

输出:

Expect: 2016-02-08 15:43:32 +0000 
Got: 2016-02-08 18:43:32 +0000 
     2016-02-08 12:43:32 +0000 
+0

这里有一个有趣的factoid:如果你更改为'formatter.dateFormat =“M/d/yyyy H:mm:ss”'并输入'“2/8/2016 15:43:32”'你会得到正确的时间... – sschale

回答

0

变化"M/d/yyyy H:mm:ss a" - >"M/d/yyyy h:mm:ss a"。小时数不应大写(大写的H表示24小时制)。在操场上验证。