比较 Swift 中的日期 2.1 升序与较早的相同?
Comparing Dates in Swift 2.1 Ascending is the Same as Earlier?
我在使用日期选择器时很困惑。如果我尝试像这样比较日期,较早日期的结果与相同日期的结果相同:
@IBAction func datePickerChanged() {
let date = NSDate()
if datePicker.date.compare(date) == NSComparisonResult.OrderedDescending {
print("Date picked: \(datePicker.date) is later than current date: \(date)")
} else if datePicker.date.compare(date) == NSComparisonResult.OrderedAscending {
print("Date picked: \(datePicker.date) is earlier than current date: \(date)")
} else if datePicker.date.compare(date) == NSComparisonResult.OrderedSame {
print("Date picked: \(datePicker.date) is same as current date: \(date)")
}
}
结果:
Date picked: 2015-11-11 18:29:40 +0000 is earlier than current date:
2015-11-12 18:29:43 +0000
Date picked: 2015-11-12 18:29:40 +0000 is earlier than current date:
2015-11-12 18:29:49 +0000
Date picked: 2015-11-13 18:29:40 +0000 is later than current date:
2015-11-12 18:29:54 +0000
卧槽?不,2015-11-12 不早于 2015-11-12... 一样。
对比无误。日期是一样的,但如果你看一下小时、分钟和秒,它们是不一样的,这会给你准确的结果。
如果你只想比较日期,你可以从它的日期组件(参见 NSDateComponents 文档)构建一个新日期(对于你想要比较的每个日期) - 只添加你想要检查的组件,这是年月日-然后做比较
编辑:Leo Dabus 指出您可以使用 NSCalendar 进行日期比较,它比创建新日期并以这种方式进行比较要灵活得多。
NSDate 不仅仅是一个 "date" 比较 - "time" 比较也是内置的。
如果你只是想比较天数,而不是时间,那么使用NSCalendar
方法compareDate:toDate:toUnitGranularity:
if NSCalendar.currentCalendar().compareDate(datePicker.date,
toDate:date,
toUnitGranularity:NSCalendarUnit.Day) == NSComparisonResult.OrderedDescending
{ ...
}
这是根据当地时区的日期边界进行比较的。
我在使用日期选择器时很困惑。如果我尝试像这样比较日期,较早日期的结果与相同日期的结果相同:
@IBAction func datePickerChanged() {
let date = NSDate()
if datePicker.date.compare(date) == NSComparisonResult.OrderedDescending {
print("Date picked: \(datePicker.date) is later than current date: \(date)")
} else if datePicker.date.compare(date) == NSComparisonResult.OrderedAscending {
print("Date picked: \(datePicker.date) is earlier than current date: \(date)")
} else if datePicker.date.compare(date) == NSComparisonResult.OrderedSame {
print("Date picked: \(datePicker.date) is same as current date: \(date)")
}
}
结果:
Date picked: 2015-11-11 18:29:40 +0000 is earlier than current date: 2015-11-12 18:29:43 +0000
Date picked: 2015-11-12 18:29:40 +0000 is earlier than current date: 2015-11-12 18:29:49 +0000
Date picked: 2015-11-13 18:29:40 +0000 is later than current date: 2015-11-12 18:29:54 +0000
卧槽?不,2015-11-12 不早于 2015-11-12... 一样。
对比无误。日期是一样的,但如果你看一下小时、分钟和秒,它们是不一样的,这会给你准确的结果。
如果你只想比较日期,你可以从它的日期组件(参见 NSDateComponents 文档)构建一个新日期(对于你想要比较的每个日期) - 只添加你想要检查的组件,这是年月日-然后做比较
编辑:Leo Dabus 指出您可以使用 NSCalendar 进行日期比较,它比创建新日期并以这种方式进行比较要灵活得多。
NSDate 不仅仅是一个 "date" 比较 - "time" 比较也是内置的。
如果你只是想比较天数,而不是时间,那么使用NSCalendar
方法compareDate:toDate:toUnitGranularity:
if NSCalendar.currentCalendar().compareDate(datePicker.date,
toDate:date,
toUnitGranularity:NSCalendarUnit.Day) == NSComparisonResult.OrderedDescending
{ ...
}
这是根据当地时区的日期边界进行比较的。