日期比较返回错误值? (迅速)

时间:2016-08-20 20:57:00

标签: swift2 ios9 nsdate

我试图在Swift中比较Day的两个日期。在此solution之后写了以下代码:

let workoutdate: NSDate = participantdata[self.lastindexchecked].workout!.start!
let todaysdate = NSDate()
let order = NSCalendar.currentCalendar().compareDate(todaysdate, toDate: workoutdate, toUnitGranularity: .Day)

switch order {
case .OrderedDescending:
    print("DESCENDING")
case .OrderedAscending:
    print("ASCENDING")
case .OrderedSame:
    print("SAME")
}

但是,此代码似乎并不总是返回所需的结果。

todaysdate等于:

2016-08-20 20:51:26 +0000

当workoutdate等于:

2016-08-20 00:14:53 +0000

结果是" DESCENDING"

但是,当锻炼日期设置为不同时,例如

2016-08-20 04:00:00 +0000

结果确实是"相同"如预测。

任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

NSDate是基金会的一个基本构造,所以很久以前就会发现并修复这样的错误。在您认为它是Apple的错误之前,请先考虑您自己的错误。而且大多数头痛涉及涉及时区的日期。

我在EDT(-0400)时区,所以:

todaysdate  = 2016-08-20 20:51:26 +0000 = 2016-08-20 16:51:26 -0400
workoutdate = 2016-08-20 00:14:53 +0000 = 2016-08-19 20:14:53 -0400

您可以看到在我的时区中表达的时间,它们落在不同的日期,DESCENDING正是这里的预期。

您可以通过将日历设置为始终使用GTM来解决此问题:

let calendar = NSCalendar.currentCalendar()
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let order = calendar.compareDate(todaysdate, toDate: workoutdate, toUnitGranularity: .Day)