【问题标题】:Why I am getting error on comparing two dates [duplicate]为什么我在比较两个日期时出错[重复]
【发布时间】:2019-06-25 08:38:10
【问题描述】:

我正在尝试比较两个日期,一个来自服务器,另一个是我的本地设备时间。

这是代码 sn-p。

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")
}

  

           

错误:

二元运算符“>=”不能应用于“日期”和“日期”类型的操作数?

【问题讨论】:

  • dateFromServer的值是多少?
  • 它是UTC类型的日期,我从服务器获取(2019-06-21 20:00:00 +0000)

标签: swift date calendar


【解决方案1】:

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")
    }
}

【讨论】:

    【解决方案2】:

    这是因为您试图比较 Optional(Date) 和 Date 类型。尝试解开您的 dateFromServer 变量。 例如

    if (deviceDate >= dateFromServer!){
        print("Live Matches")
    }else{
        print("Old/Upcoming Matches")
    }
    

    另外,您在这里比较 DateString deviceDate &lt;= "\(dateNewServer)"

    【讨论】:

      【解决方案3】:
         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
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 2014-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2015-07-08
        相关资源
        最近更新 更多