为什么我在比较两个日期时出错
Why I am getting error on comparing two dates
我正在尝试比较两个日期,一个来自服务器,另一个是我的本地设备时间。
这是代码片段。
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")
}
错误:
二元运算符“>=”不能应用于 'Date' 和 'Date?'
类型的操作数
这是因为您正在尝试比较 Optional(Date) 和 Date 类型。尝试展开您的 dateFromServer
变量。
例如
if (deviceDate >= dateFromServer!){
print("Live Matches")
}else{
print("Old/Upcoming Matches")
}
此外,您在这里比较 Date
和 String
deviceDate <= "\(dateNewServer)"
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
}
dateNewServer
是一个 optional
。所以在进一步使用之前你需要先打开它。这是你的错误所说的。
func date(byAdding component: Calendar.Component, value: Int, to date:
Date, wrappingComponents: Bool = default) -> Date?
解决方案:使用可选绑定(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")
}
}
我正在尝试比较两个日期,一个来自服务器,另一个是我的本地设备时间。
这是代码片段。
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")
}
错误:
二元运算符“>=”不能应用于 'Date' 和 'Date?'
类型的操作数这是因为您正在尝试比较 Optional(Date) 和 Date 类型。尝试展开您的 dateFromServer
变量。
例如
if (deviceDate >= dateFromServer!){
print("Live Matches")
}else{
print("Old/Upcoming Matches")
}
此外,您在这里比较 Date
和 String
deviceDate <= "\(dateNewServer)"
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
}
dateNewServer
是一个 optional
。所以在进一步使用之前你需要先打开它。这是你的错误所说的。
func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?
解决方案:使用可选绑定(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")
}
}