在确定是否进入while循环时,我试图比较两个日期对象。
我已经设置了一个断点,并将两个值都打印到控制台,并且它们是相同的-但是while循环被绕过了。
while currentTime + intervalTime <= endTime { }
currentTime
是一个Date对象,endTime
也是如此。 intervalTime
是一个TimeInterval。当我使用断点并打印到控制台时,得到以下结果。看起来它们应该相等,但是,正如我所说,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
答案 0 :(得分:1)
Date
表示绝对时间点,包括小数秒(达到一定的精度,受TimeInterval
的精度(又称为Double
以及其他因素的限制)。< / p>
您可以将时间间隔截断为整数秒,或使用适当的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 { }