NSPredicate: NSLog предиката, использующего NSDate, кажется неправильным - PullRequest
0 голосов
/ 02 апреля 2019

Где моя ошибка?

следующие строки кода:

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")

И эта временная метка относится к: 01.04.1988 @ 18:19 (UTC)

Так почему же год такой неправильный? Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019
Эпоха

NSDate отличается от эпохи Unix. От документов :

Объекты даты являются неизменными и представляют собой неизменный временной интервал относительно абсолютной контрольной даты (00:00:00 UTC 1 января 2001 года).

Итак, 575921995,671820 секунд с 2001/01/01 года - 2019-04-02 18:19:55 UTC.

2 голосов
/ 02 апреля 2019

Ваша математика верна, но внутренняя контрольная дата, используемая NSDate, - 2001-01-01, а не 1970-01-01, как видно во многих других местах для отметок времени UNIX.Именно поэтому NSDate имеет timeIntervalSinceReferenceDate и timeIntervalSince1970 .

...