2016-09-23 104 views
1

我正在使用swift的日期格式。試圖隱蔽字符串日期的NSDate和NSSate串日期(ISO 8601格式)Swift NSDate iso 8601格式

這是我的代碼

let stringDate = "2016-05-14T09:30:00.000Z" // iso 8601 format 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" //iso 8601 

let date = dateFormatter.dateFromString(stringDate) 
print("Date = \(date)") // Output is 2016-05-14 16:30:00 +0000 

// again converting it date to string using stringFromDate 
print("\(dateFormatter.stringFromDate(date!))") // 2016-05-14T09:30:00.000Z 

我試圖理解爲什麼我在GMT格式獲得的NSDate(增加7小時,時間09:30至16:30)? 如果我將NSDate date變量轉換爲字符串,那麼我得到的是原始字符串日期。任何人都可以幫助我理解這裏發生的事情嗎?

+0

你瞄準的MacOS 10.12或更高版本?有一個新的類「ISO8601DateFormatter」,可能會有所幫助。 – sbooth

+0

不,我正在macOS 10.11.6和iOS 9上工作。 我將檢查此類「ISO8601DateFormatter」。謝謝。 –

回答

2

您的格式字符串錯了。你指示一個文字Z而不是「Z作爲祖魯時間」。刪除單引號:

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") 

你應該總是指定的區域設置爲en_US_POSIXwhen parsing internet time。這讓經常被忽視,蘋果創造了ISO8601DateFormatter類OS X 10.12