swift 快速比较日期iOS 15

lkaoscv7  于 2023-02-07  发布在  Swift
关注(0)|答案(1)|浏览(194)

有人能告诉我为什么服务器上的日期不能正确显示吗?我正在尝试将日期与“现在”进行比较,这样我就可以看到过去、今天和未来的情况。

func getDetails(for game: Game) -> String {
    let now = Date.now
    let gameDate = game.gameDate
    if gameDate.compare(now) == .orderedAscending {
      print(“past”)
      return "past"
    }
    if gameDate.compare(now) == .orderedDescending {
      print(“future”)
      return "future"
    }
    if gameDate.compare(now) == .orderedSame {
      print(“today”)
      return "today"
    }
    return "none"
  }

我的解码器是set decoder.dateDecodingStrategy = .iso8601所有的日期回来“过去”,这是iOS 15+感谢您的帮助提前.

6jjcrrmo

6jjcrrmo1#

没有理由对日期使用compare()函数,因为日期符合Comparable和Equatable协议,这意味着可以使用><=>=<=直接比较它们。
也就是说,我们不知道您的game.date值是多少。
我可以告诉你,Date对象以亚毫秒级的精度捕获日期和时间,你传入函数的任何日期都可能是在代码运行之前的几纳秒,因此是过去的。
考虑以下代码:

let now = Date()

var total = 1
total *= 2

let later = Date()

let equalString = (now == later) ? "equal" : "not equal"
print("The dates are \(equalString)")
if now != later {
    print("Dates differ by \(later.timeIntervalSinceReferenceDate - now.timeIntervalSinceReferenceDate)")
}

这段代码打印出“日期不相等”,因为later的日期比now晚了一小部分秒,而1 * 2的乘法需要足够的时间。
(On我的机器它说较晚的日期比now日期大8. 499622344970703 e-05,或者大约8. 4微秒。)
取出两个语句之间的数学代码,有时你会得到它说的日期是相等的,而其他时候,它会说他们不相等。

相关问题