Подтвердить что ты не робот

За кулисами: Даты основных данных хранятся с 31-летним смещением?

Я знаю, "нет деталей, обслуживаемых пользователем"... но мне любопытно:

В базе данных sqlite3 с базовыми данными, похоже, я могу получить дату в ZDATE, например:

sqlite> select datetime(ZDATE,'unixepoch','31 years','localtime') from ZMYCLASS;
2003-12-11 19:00:00
2009-12-31 19:00:00
2009-01-24 19:00:00
2011-01-01 19:00:00
2009-10-03 20:00:00
...

Unix Epoch Я получаю, но почему 31 год?

4b9b3361

Ответ 1

Основные данные хранят даты относительно контрольной даты, которая является 1 января 2001 года (31 год после EPOCH, как указано в комментариях)

Здесь некоторый код для декодирования дат из таблицы, если он вам полезен.

NSNumber *time = [NSNumber numberWithDouble:(d - 3600)];
NSTimeInterval interval = [time doubleValue];    
NSDate *online = [NSDate dateWithTimeIntervalSinceReferenceDate:interval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss.SSS"];

NSLog(@"result: %@", [dateFormatter stringFromDate:online]);

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

Взгляните на + dateWithTimeIntervalSinceReferenceDate: