我的错误在哪里?
以下代码行:
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")
此时间戳指的是:04/01/1988 @ 6:19 pm(UTC)
那么为什么今年这么错呢?我做错了什么?
您的数学是正确的,但NSDate使用的内部参考日期是2001-01-01,而不是1970-01-01,正如UNIX时间戳的许多其他地方所见。这也是为什么NSDate有timeIntervalSinceReferenceDate和timeIntervalSince1970的原因。
NSDate
的时代与Unix时代不同。来自the docs:
日期对象是不可变的,表示相对于绝对参考日期(2001年1月1日00:00:00 UTC)的不变时间间隔。
因此,从2001/01/01开始的575921995.671820秒是2019-04-02 18:19:55 UTC。