我想将NSDate()转换为UTC日期字符串,然后将此日期字符串转换回NSDate,但结果不一样。
func UTCDateStringFromDate(date: NSDate) -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
dateFormatter.timeZone = NSTimeZone(name: "UTC")
dateFormatter.dateFormat = "yyyyMMdd'T'HHmmss'Z'"
let dateString = dateFormatter.stringFromDate(date)
return dateString
}
// outputs: "20150520T030303Z"
let dateString = UTCDateStringFromDate(NSDate())
func dateFromUTCDateString(dateString: String) -> NSDate {
let dateFormatter = NSDateFormatter()
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
dateFormatter.timeZone = NSTimeZone(name: "UTC")
dateFormatter.dateFormat = "yyyyMMdd'T'HHmmss'Z'"
return dateFormatter.dateFromString(dateString)!
}
// outputs: "May 20, 2015, 11:03 AM"
dateFromUTCDateString(dateString)
正如你所看到的两个输出,当我将NSDate()转换为UTC日期字符串时,结果是"20150520T030303Z",然后我将这个日期字符串转换回NSDate,结果是"May 20,2015, 11:03 AM"。为什么时间不一样?第一个是03:03,第二个是11:03?
因为如果你只是打印一个NSDate()
它将记录日期格式在GMT,所以在你的时间是UTC + 8
所以,你的代码运行得很好。
编辑:-
NSDate
没有时区,它只是一个绝对时间的参考。