彼此相邻创建的两个 NSDates 比较不相等

Two NSDates created next to each other do not compare equal

此代码比较了一个接一个创建的两个 NSDate,并没有像我预期的那样进入 .OrderedSame 情况。

import UIKit

let chosenDate = NSDate()

let currentDate = NSDate()

let formatter = NSDateFormatter()
formatter.dateFormat = "EEEE"

let day = formatter.stringFromDate(chosenDate)

var result = String()

switch chosenDate.compare(currentDate) {

case .OrderedSame:
    result = "Today is a \(day)"
    break
case .OrderedAscending:
    result = "That was a \(day)"
    break
case .OrderedDescending:
    result = "That will be a \(day)"
    break
}

print(result)

每当我运行这个(在操场上或者[我把它从我的项目文件拉到操场上来测试东西]在模拟器中)它给我"That was a (insert day here) instead of "今天 是(在这里插入一天)。这是为什么?

日期相同,您可以使用

轻松验证
let chosenDate = NSDate()
let currentDate = NSDate()

print(chosenDate.timeIntervalSinceReferenceDate)
print(currentDate.timeIntervalSinceReferenceDate)
print(currentDate.timeIntervalSinceDate(chosenDate))

示例输出:

483241075.692769
483241075.692773
3.99351119995117e-06

NSDate表示一个时间点,存储为NSTimeInterval (又名 Double)自 2001 年 1 月 1 日以来的秒数。 此时间跨度包括 小数秒

chosenDatecurrentDate的值不一样。如果打印日期值,您会发现它们不同,可能相差几毫秒。

如果要检查是否相同,需要尝试NSCalendar方法compareDate:toDate:toUnitGranularity:

您可以使用NSCalendarUnitDay来比较日期是否在同一天。