我正在尝试比较两个日期,一个是来自服务器的日期,另一个是我的本地设备时间。我不知道为什么会显示此错误。
let deviceDate = Date()
let calendar = Calendar.current
let dateNewServer = calendar.date(byAdding: .minute, value: 120, to: dateFromServer!)
//deviceDate -> 2019-06-25 08:28:03 +0000
//dateFromServer -> 2019-06-21 20:00:00 +0000
//dateNewServer -> 2019-06-21 22:00:00 +0000
if (deviceDate >= dateFromServer) && (deviceDate <= dateNewServer){
print("Live Matches")
}else{
print("Old/Upcoming Matches")
}
答案 0 :(得分:1)
这是因为您正在尝试比较Optional(Date)和Date类型。尝试展开您的dateFromServer
变量。
例如
if (deviceDate >= dateFromServer!){
print("Live Matches")
}else{
print("Old/Upcoming Matches")
}
此外,您正在Date
上比较String
和deviceDate <= "\(dateNewServer)"
答案 1 :(得分:1)
dateNewServer
是optional
。因此,您需要先将其拆开,然后再使用。这就是你的错误所表达的。
日期,fun date(通过添加组件:Calendar.Component,值:Int,到日期: 日期,包装组件:布尔=默认值)->日期?
解决方案:使用可选绑定 (if let)
或强制展开 (!)
对其进行包装。 可选绑定是解开optional
的更安全的方法。
if let dateNewServer = calendar.date(byAdding: .minute, value: 120, to: dateFromServer) {
if deviceDate.compare(dateFromServer) == .orderedDescending && deviceDate.compare(dateNewServer) == .orderedAscending {
print("Live Matches")
} else {
print("Old/Upcoming Matches")
}
}
答案 2 :(得分:0)
let checkGreaterDate = deviceDate.isGreaterThanDate(dateToCompare: dateFromServer!)
let checkLesserDate = deviceDate.isLessThanDate(dateToCompare: dateNewServer!)
if checkGreaterDate && checkLesserDate{
print("Live Matches")
}else{
print("Old/Upcoming Matches")
}
辅助方法
func isLessThanDate(dateToCompare: Date) -> Bool {
//Declare Variables
var isLess = false
//Compare Values
if self.compare(dateToCompare as Date) == ComparisonResult.orderedAscending {
isLess = true
}
//Return Result
return isLess
}
func isGreaterThanDate(dateToCompare: Date) -> Bool {
//Declare Variables
var isGreater = false
//Compare Values
if self.compare(dateToCompare as Date) == ComparisonResult.orderedDescending {
isGreater = true
}
//Return Result
return isGreater
}