2016-09-23 108 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

相关问题