Datetime 幕后:以31年偏移量存储的核心数据日期?

Datetime 幕后:以31年偏移量存储的核心数据日期?,datetime,core-data,unix-timestamp,Datetime,Core Data,Unix Timestamp,我知道,“里面没有用户可维修的部件”。。。但我很好奇: 在核心数据sqlite3 DB中,我似乎可以在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 .

我知道,“里面没有用户可维修的部件”。。。但我很好奇:

在核心数据sqlite3 DB中,我似乎可以在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纪元,但为什么是31年?

核心数据存储相对于参考日期的日期,即2001年1月1日(注释中指出的纪元后31年)

这里有一些代码可以解码表中的日期,以防对您有用

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]);


看看
+datewithtimeintervalcescereferencedate:

2001年1月1日是Unix时代之后的31年。这听起来像是对我的一个回答。为什么苹果会不厌其烦地创建自己的、定制的时代基础?Y2k bug担忧?您可以使用