NSPredicate:使用NSDate的谓词的NSLog似乎是错误的

问题描述 投票:0回答:2

我的错误在哪里?

以下代码行:

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)

那么为什么今年这么错呢?我做错了什么?

objective-c nsdate nspredicate unix-timestamp
2个回答
2
投票

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


2
投票

NSDate的时代与Unix时代不同。来自the docs

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

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

© www.soinside.com 2019 - 2024. All rights reserved.