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 结尾处的Z
) 而 NSDateComponents
不包含。所以我们需要简单地通知dateComponents
NSTimeZone
:
dateComponents.timeZone = NSTimeZone(abbreviation: "UTC")
输出日期现在相同。
将相同的信息添加到dateFormatter
:
dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")
不会改变任何东西,因为还有关于 NSTimeZone
的信息。
【讨论】:
以上是关于NSDateFormatter 和 NSDateComponents 的输出 NSDate 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
NSDateFormatter 和 NSDateComponents 的输出 NSDate 之间的区别
NSDateFormatter 和 NSDateComponents 为周数返回不同的值