将NSDate转换为UTC字符串,然后再转换回NSDate,结果不一样

时间:2015-05-20 03:08:19

标签: ios datetime nsdate nsdateformatter utc

我想将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,结果是“2015年5月20日,11:03上午”。为什么时间不一样?第一个是03:03,第二个是11:03?

1 个答案:

答案 0 :(得分:1)

因为如果您只打印NSDate()

它会在 GMT 中记录日期格式,因此您的时间是 UTC + 8

所以,你的代码效果很好。

编辑:

  • 没有NSDate的时区,它只是绝对时间的参考。