2016-03-05 98 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小時制)。在操場上驗證。