【问题标题】:NSPredicate: NSLog of predicate using NSDate seems wrongNSPredicate:使用 NSDate 的谓词的 NSLog 似乎是错误的
【发布时间】:2019-04-02 18:22:29
【问题描述】:

我的错误在哪里?

以下代码行:

NSPredicate* someTestPredicate = [NSPredicate predicateWithFormat:@"departureTime >= %@", [NSDate date]];
    NSLog(@"Some Test Predicate: %@", someTestPredicate);

结果:

2019-04-02 20:19:55.671894+0200 [9402:337625] Some Test Predicate: departureTime >= CAST(575921995.671820, "NSDate")

这个时间戳是指: 1988 年 4 月 1 日下午 6:19(UTC)

那么为什么年份如此错误?我做错了什么?

【问题讨论】:

标签: objective-c nsdate nspredicate unix-timestamp


【解决方案1】:

您的数学是正确的,但 NSDate 使用的内部参考日期是 2001-01-01,而不是 1970-01-01,正如在许多其他地方看到的 UNIX 时间戳。这也是 NSDate 有timeIntervalSinceReferenceDatetimeIntervalSince1970 的原因。

【讨论】:

    【解决方案2】:

    NSDate 的纪元与 Unix 纪元不同。来自the docs

    Date 对象是不可变的,表示相对于绝对参考日期(2001 年 1 月 1 日 00:00:00 UTC)的不变时间间隔。

    因此,从 2001/01/01 开始的 575921995.671820 秒是 2019-04-02 18:19:55 UTC。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      相关资源
      最近更新 更多