Swift NSDate iso 8601格式

我正在使用swift中的日期格式。 试图将字符串日期转换为NSDate,将NSSate转换为字符串日期(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(在09:30到16:30增加7小时)? 如果我将该NSDate date变量转换为字符串,那么我将获得原始字符串日期。 任何人都可以帮助我了解这里发生了什么?

你的格式字符串错了。 你指出一个文字Z而不是“Z作为祖鲁时间”。 删除单引号:

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

解析Internet时,应始终将语言环境指定为en_US_POSIX 。 这是如此普遍被忽视,以至于Apple在OS X 10.12中创建了ISO8601DateFormatter

您可以在Swift 3.0+中使用NSISO8601DateFormatter或ISO8601DateFormatter