NSDateFormatter和NSDateComponents的输出NSDate之间的区别

时间:2015-07-16 15:35:24

标签: nsdate nsdateformatter nsdatecomponents

let stringWithDate = "2015-07-16T6:08:32.000Z"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

let dateComponents = NSDateComponents()
dateComponents.year = 2015
dateComponents.month = 7
dateComponents.day = 16
dateComponents.hour = 6
dateComponents.minute = 8
dateComponents.second = 32

let dateFromDateFormatter = dateFormatter.dateFromString(stringWithDate) //"Jul 16, 2015, 8:08 AM"
let dateFromDateComponents = NSCalendar.currentCalendar().dateFromComponents(dateComponents)! //"Jul 16, 2015, 6:08 AM"

dateFromDateFormatter == dateFromDateComponents //false

为什么这些日期不一样?

1 个答案:

答案 0 :(得分:1)

经过一番挖掘后,我找到了解决方案:

NSDateFormatter包含有关NSTimeZone (Sting结束时Z的信息,而NSDateComponents则没有。因此,我们需要简单地告知dateComponents NSTimeZone

dateComponents.timeZone = NSTimeZone(abbreviation: "UTC")

输出日期现在相同。

将相同的信息添加到dateFormatter

dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")

不会改变任何内容,因为还有关于NSTimeZone的信息。