幕后:存储31期核心数据日期偏移?(Behind The Scenes: Core Data dat

2019-06-24 16:02发布

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

在核心数据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年?

Answer 1:

核心数据保存日期,相对于基准日,这是2001年1月1日(EPOCH31年后在评论中指出)

下面是一些代码从表中的日期进行解码,在情况下,它是对你有用。

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:



文章来源: Behind The Scenes: Core Data dates stored with 31 year offset?