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

Posted

技术标签:

【中文标题】NSDateFormatter 和 NSDateComponents 的输出 NSDate 之间的区别【英文标题】:Difference between output NSDate from NSDateFormatter and NSDateComponents 【发布时间】:2015-07-16 15:35:24 【问题描述】:
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】:

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

NSDateFormatter 包含有关 NSTimeZone 的信息 (在 Sting 结尾处的ZNSDateComponents 不包含。所以我们需要简单地通知dateComponentsNSTimeZone

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

输出日期现在相同。

将相同的信息添加到dateFormatter

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

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

【讨论】:

以上是关于NSDateFormatter 和 NSDateComponents 的输出 NSDate 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

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

NSDate NSDateFormatter

使用 NSDateFormatter 管理日期

NSDateFormatter 和 NSDateComponents 为周数返回不同的值

NSDateFormatter 给出不同的输出/错误(GMT?)时间

Foundation框架中的NSDateFormatter