【发布时间】:2018-04-23 15:49:31
【问题描述】:
我正试图找出为什么这段代码如此奇怪。您可以在下面找到详细信息:
let nowDate = Date()
let threeDayBeforeNowDate_t1 = Date(timeIntervalSinceNow: -60 * 60 * 24 * 3)
let oneDayAfterNowDate = Date(timeIntervalSinceNow: 60 * 60 * 24 * 1)
let threeDayBeforeNowDate_t2 = Date(timeIntervalSinceNow: -60 * 60 * 24 * 3)
let threeDayBeforeNowDate = nowDate.addingTimeInterval(-60 * 60 * 24 * 3)
let diff_1 = threeDayBeforeNowDate_t1.timeIntervalSince(nowDate) - threeDayBeforeNowDate.timeIntervalSince(nowDate) // about 0.009357
let diff_2 = threeDayBeforeNowDate_t2.timeIntervalSince(nowDate) - threeDayBeforeNowDate.timeIntervalSince(nowDate) // about 0.010063
let diff_3 = threeDayBeforeNowDate_t2.timeIntervalSince(nowDate) - threeDayBeforeNowDate_t1.timeIntervalSince(nowDate) // about 0.000416
let calendar = Calendar.current
calendar.dateComponents(Set([Calendar.Component.day]), from: threeDayBeforeNowDate, to: oneDayAfterNowDate) // result = "day: 4 isLeapMonth: false"
calendar.dateComponents(Set([Calendar.Component.day]), from: threeDayBeforeNowDate_t1, to: oneDayAfterNowDate) // day: 4 isLeapMonth: false
calendar.dateComponents(Set([Calendar.Component.day]), from: threeDayBeforeNowDate_t2, to: oneDayAfterNowDate) // day: 3 isLeapMonth: false
我不明白,为什么我得到的结果如此不同,而日期 (threeDayBeforeNow...) 相差不到一秒。
【问题讨论】:
-
从不使用
60 * 60 * 24作为一天的持续时间。想想夏令时转换,一天可以有 23、24 或 25 小时。使用正确的日历方法。 -
马丁,我明白了,这只是为了测试。
-
“我得到了如此不同的结果,而日期相差不到一秒” – 在最后一种情况下,日期相差(一点点)小于 b> 超过 4 天,因此结果为 3。如果您打印所有日期组件,那么您会更清楚地看到它。
-
我打印了组件。所以,得到:imgur.com/a/bibMZ
标签: ios swift date calendar foundation