【发布时间】:2017-07-06 18:41:46
【问题描述】:
我有两个日期,我想比较一下。
如何比较日期?
我必须约会对象。说modificateionDate 较旧的updatedDate。
那么比较日期的最佳做法是什么?
【问题讨论】:
-
最佳实践会得到意见。展示“你”如何比较日期并询问是否有更好的方法?
-
看看this
我有两个日期,我想比较一下。
如何比较日期?
我必须约会对象。说modificateionDate 较旧的updatedDate。
那么比较日期的最佳做法是什么?
【问题讨论】:
Date 现在符合Comparable 协议。所以你可以简单地使用<、>和==来比较两个Date类型的对象。
if modificateionDate < updatedDate {
//modificateionDate is less than updatedDate
}
【讨论】:
Date 实例然后这将起作用,我认为你有NSDate 实例首先确认这里显示你的代码。如果你在 Swift 3 中使用 Date 而不是 NSDate
根据@NiravD 的回答,Date 是Comparable。但是,如果要与给定的粒度进行比较,可以使用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 的比较结果与orderedAscending、orderedDescending 相同,如下所示。
if modificateionDate.compare(updatedDate) == ComparisonResult.orderedAscending {
//Do what you want
}
希望对您有所帮助。
【讨论】:
Swift has ComparisonResult with orderedAscending 不,这是来自基金会。 Swift 本身没有这些。