24 Stimmen

Hinter den Kulissen: Kerndaten mit 31 Jahren Versatz gespeichert?

Ich weiß, "keine vom Benutzer zu wartenden Teile im Inneren" ... aber ich bin neugierig:

In einem Core Data sqlite3 DB, scheint es, ich kann das Datum innerhalb einer ZDATE wie so erhalten:

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 verstehe ich, aber warum 31 Jahre?

25voto

mprivat Punkte 21148

Core Data speichert Daten relativ zum Referenzdatum, das der 1. Januar 2001 ist (31 Jahre nach EPOCH, wie in den Kommentaren erwähnt).

Hier ist etwas Code, um die Daten aus der Tabelle zu dekodieren, falls es für Sie nützlich ist.

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

Werfen Sie einen Blick auf + dateWithTimeIntervalSinceReferenceDate:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X