首页 > 解决方案 > 日期比较失败

问题描述

在决定是否进入 while 循环时,我试图比较两个日期对象。

我已经设置了一个断点并将两个值都打印到控制台,它们是相同的——但是绕过了 while 循环。

while currentTime + intervalTime <= endTime { }

currentTime是一个 Date 对象,就像endTime. intervalTime是一个时间间隔。当我使用断点并打印到控制台时,我得到了以下结果。看起来它们应该相等,但正如我所说,while 循环被绕过了。

(lldb) print currentTime + intervalTime
(Date) $R8 = 2019-02-04 13:19:05 UTC
(lldb) print endTime
(Date) $R10 = 2019-02-04 13:19:05 UTC

标签: iosswift

解决方案


ADate代表一个绝对时间点,包括小数秒(达到一定精度,受TimeIntervalaka的精度限制Double,可能还有其他因素)。

您可以将时间间隔截断为整数秒,或使用正确的Calendar方法:

let date = Date()
let date1 = Calendar.current.dateInterval(of: .second, for: date)!.start

print(date.timeIntervalSinceReferenceDate)  // 571003391.256104
print(date1.timeIntervalSinceReferenceDate) // 571003391.0

您还可以将两个日期与整秒的“粒度”进行比较:

if Calendar.current.compare(currentDate, to: endDate, toGranularity: .second) != .orderedAscending { }

推荐阅读