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