【问题标题】:Two NSDates created next to each other do not compare equal两个相邻创建的 NSDate 比较不相等
【发布时间】:2016-04-25 01:22:56
【问题描述】:

这段代码比较了一个接一个地创建的两个NSDates,并没有像我预期的那样进入.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)

每当我在模拟器中运行它(在操场上或[我从项目文件中将它拉到操场上以测试东西])时,它都会给我“那(在此处插入一天)而不是“今天是(在此处插入一天)。这是为什么呢?

【问题讨论】:

    标签: swift cocoa-touch switch-statement nsdate


    【解决方案1】:

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

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

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

    【讨论】:

    • 只是打印日期不会显示差异,因为默认的描述方法不包括小数秒。但是关于compareDate:toDate:toUnitGranularity:的好建议!
    【解决方案2】:

    日期不同相同,您可以使用

    轻松验证
    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 日以来的秒数。 此时间跨度包括小数秒

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多