我有两个日期,想要进行比较。如何比较这两个日期呢?我有两个日期对象,分别是modificationDate
和updatedDate
。
那么,比较日期的最佳实践是什么呢?
我有两个日期,想要进行比较。如何比较这两个日期呢?我有两个日期对象,分别是modificationDate
和updatedDate
。
那么,比较日期的最佳实践是什么呢?
Date
现在符合 Comparable
协议。因此,您可以使用 <
、>
和 ==
来比较两个 Date
类型的对象。
if modificateionDate < updatedDate {
//modificateionDate is less than updatedDate
}
Date
实例,那么这个代码应该可以工作。我认为你可能有一个NSDate
实例,请先确认一下,把你的代码展示出来。在Swift 3中最好使用Date
而不是NSDate
。 - Nirav D根据@NiravD的回答,Date
是可比较的。然而,如果你想要按照给定的精度进行比较,你可以使用Calendar
的compare(_:to:toGranularity:)
方法。
例如...
let dateRangeStart = Date()
let dateRangeEnd = Date().addingTimeInterval(1234)
// Using granularity of .minute
let order = Calendar.current.compare(dateRangeStart, to: dateRangeEnd, toGranularity: .minute)
switch order {
case .orderedAscending:
print("\(dateRangeEnd) is after \(dateRangeStart)")
case .orderedDescending:
print("\(dateRangeEnd) is before \(dateRangeStart)")
default:
print("\(dateRangeEnd) is the same as \(dateRangeStart)")
}
> 2017-02-17 10:35:48 +0000 is after 2017-02-17 10:15:14 +0000
// Using granularity .hour
let order = Calendar.current.compare(dateRangeStart, to: dateRangeEnd, toGranularity: .hour)
> 2017-02-17 10:37:23 +0000 is the same as 2017-02-17 10:16:49 +0000
Swift iOS 8及以上版本 当你需要比较的不仅仅是日期的大小时。例如,它是同一天还是前一天,...
注意: 永远不要忘记时区。日历时区有一个默认值,但如果您不喜欢默认值,必须自己设置时区。要知道今天是哪一天,您需要知道您所在的时区。
extension Date {
func compareTo(date: Date, toGranularity: Calendar.Component ) -> ComparisonResult {
var cal = Calendar.current
cal.timeZone = TimeZone(identifier: "Europe/Paris")!
return cal.compare(self, to: date, toGranularity: toGranularity)
}
}
使用方法如下:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
以下是一个更加复杂的使用示例,演示如何在筛选器中使用:
Swift有ComparisonResult,包括orderedAscending、orderedDescending和same如下。
if modificateionDate.compare(updatedDate) == ComparisonResult.orderedAscending {
//Do what you want
}
希望这能对你有所帮助。
orderedAscending
,但是在Foundation框架中有ComparisonResult
。 - Eric Aya