Swift 3 – 比较date对象
我正在更新我的应用程序Swift 3.0语法(我知道它仍然在testing版,但我想要尽快准备就绪)。
直到之前的Xcode(Beta 5)Beta,我才能够使用操作数< , >和==比较两个Date对象。 但是在最新的testing版(Beta 6)中,这已经不再适用了。 以下是一些截图: 
  
  
 
 正如你可以在两个屏幕截图中看到的,这些是两个Date对象。 但是我得到以下错误:  
 
 我究竟做错了什么? 这些函数仍然在Date类中声明: 
static func >(Date, Date)如果左边的date比右边的date晚,则返回true。
这只是一个testing版错误,或者我做错了什么?
我已经在XCode 8 beta 6中试过这个代码片段,它工作正常。
 let date1 = Date() let date2 = Date().addingTimeInterval(100) if date1 == date2 { } else if date1 > date2 { } else if date1 < date2 { } 
  Date是Comparable和可Equatable (从Swift 3开始) 
这个答案补充了@Ankit Thakur的答案。
 从Swift 3开始, Date结构(基于底层的NSDate类)采用了Comparable和Equatable协议。 
-   Comparable要求Date实现运算符:<,<=,>,>=。
-   Equatable要求Date实现==运算符。
-   Equatable允许Date使用!=运算符的默认实现(这是Equatable==运算符实现的逆向)。
 以下示例代码将练习这些比较运算符,并确认哪些比较对于print语句是正确的。 
比较function
 import Foundation func describeComparison(date1: Date, date2: Date) -> String { var descriptionArray: [String] = [] if date1 < date2 { descriptionArray.append("date1 < date2") } if date1 <= date2 { descriptionArray.append("date1 <= date2") } if date1 > date2 { descriptionArray.append("date1 > date2") } if date1 >= date2 { descriptionArray.append("date1 >= date2") } if date1 == date2 { descriptionArray.append("date1 == date2") } if date1 != date2 { descriptionArray.append("date1 != date2") } return descriptionArray.joined(separator: ", ") } 
示例使用
 let now = Date() describeComparison(date1: now, date2: now.addingTimeInterval(1)) // date1 < date2, date1 <= date2, date1 != date2 describeComparison(date1: now, date2: now.addingTimeInterval(-1)) // date1 > date2, date1 >= date2, date1 != date2 describeComparison(date1: now, date2: now) // date1 <= date2, date1 >= date2, date1 == date2 
在Swift 3中,Date是Comparable,所以我们可以直接比较date
 let date1 = Date() let date2 = Date().addingTimeInterval(1) let isGreater = date1 > date2 print(isGreater) let isSmaller = date1 < date2 print(isSmaller) let isEqual = date1 == date2 print(isEqual) 
对我来说,问题是我有我自己的扩展到Date类,定义了所有的比较运算符。 现在(从swift 3开始)这个date是可比的,这些扩展是不需要的。 所以我评论他们,它的工作。
看看这个http://iswift.org/cookbook/compare-2-dates
获取date:
 // Get current date let dateA = NSDate() // Get a later date (after a couple of milliseconds) let dateB = NSDate() 
使用SWITCH语句
 // Compare them switch dateA.compare(dateB) { case .OrderedAscending : print("Date A is earlier than date B") case .OrderedDescending : print("Date A is later than date B") case .OrderedSame : print("The two dates are the same") } 
使用IF声明
  if datePickerTo.date.compare(datePicker.date) == .orderedAscending { datePickerTo.date = datePicker.date } 
比较date只有年,月,日,没有时间我这样工作:
  let order = Calendar.current.compare(self.startDate, to: compareDate!, toGranularity: .day) switch order { case .orderedAscending: print("\(gpsDate) is after \(self.startDate)") case .orderedDescending: print("\(gpsDate) is before \(self.startDate)") default: print("\(gpsDate) is the same as \(self.startDate)") } 
SWIFT 3:不知道这是你在找什么。 但是我将一个string与当前的时间戳进行比较,看看我的string现在是否比较老。
 func checkTimeStamp(date: String!) -> Bool { let dateFormatter: DateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.locale = Locale(identifier:"en_US_POSIX") let datecomponents = dateFormatter.date(from: date) let now = Date() if (datecomponents! >= now) { return true } else { return false } } 
要使用它:
 if (checkTimeStamp(date:"2016-11-21 12:00:00") == false) { // Do something }