日期比较返回错误值? (swift)
Date compare returning wrong value? (swift)
我正在尝试比较 swift 中的两个日期。在这 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")
}
但是,此代码似乎并不总是返回所需的结果。
今天日期等于:
2016-08-20 20:51:26 +0000
当锻炼日期等于:
2016-08-20 00:14:53 +0000
结果是"DESCENDING"
但是,当锻炼日期设置为不同的日期时,例如
2016-08-20 04:00:00 +0000
结果确实如预测的那样"SAME"。
有人知道发生了什么事吗?
NSDate
是 Foundation 中的一个基本结构,所以像这样的错误早就被发现并修复了。在您认为这是 Apple 的错误之前,请先考虑您自己的错误。最令人头疼的是处理涉及时区的日期。
我在美国东部时间 (-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)
我正在尝试比较 swift 中的两个日期。在这 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")
}
但是,此代码似乎并不总是返回所需的结果。
今天日期等于:
2016-08-20 20:51:26 +0000
当锻炼日期等于:
2016-08-20 00:14:53 +0000
结果是"DESCENDING"
但是,当锻炼日期设置为不同的日期时,例如
2016-08-20 04:00:00 +0000
结果确实如预测的那样"SAME"。
有人知道发生了什么事吗?
NSDate
是 Foundation 中的一个基本结构,所以像这样的错误早就被发现并修复了。在您认为这是 Apple 的错误之前,请先考虑您自己的错误。最令人头疼的是处理涉及时区的日期。
我在美国东部时间 (-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)