Core Data zu Unix-Timestamp-Konverter
Wandle Core Data in Unix-Zeit um — mit exakter Formel und Unterstützung großer Werte. Ausgabe in Sekunden, Millisekunden, ISO 8601 und lesbarem Format.
Sekunden seit 01.01.2001 UTC
Was ist ein Core-Data-Zeitstempel?
Apples Core-Data-Framework speichert Date-Attribute als Anzahl der Sekunden seit dem 1. Januar 2001 00:00:00 UTC — dasselbe CFAbsoluteTime-Referenzdatum, das in macOS und iOS verwendet wird. Wenn du einen Core-Data-Store direkt in SQLite öffnest, erscheinen Datumsspalten (oft Z…DATE genannt) als diese auf 2001 basierenden Gleitkommawerte.
- Epoche: 2001-01-01 00:00:00 UTC
- Typ: Gleitkomma-Sekunden (Sub-Sekunden-Präzision bleibt erhalten)
- Zu finden in: Core-Data-SQLite-Stores, ZDATE / Z_…_DATE-Spalten, exportierten .sqlite-Datenbanken
- Identisches Referenzdatum wie NSDate timeIntervalSinceReferenceDate
Core-Data-Zeitstempel in Unix-Zeit umwandeln
Addiere den Abstand von 978.307.200 Sekunden zwischen 1970 und 2001, um einen Core-Data-Wert auf die Unix-Epoche umzubasieren.
- Unix seconds = CoreDataTimestamp + 978307200
- Beispiel: 721692800 → 1700000000 → 2023-11-14 22:13:20 UTC
- SQLite: datetime(ZDATE + 978307200, "unixepoch")
- Umgekehrt: CoreDataTimestamp = Unix seconds − 978307200
Core-Data-SQLite-Stores abfragen
Eine Core-Data-Datenbank direkt zu lesen, ist in Forensik und Debugging üblich. Da die Werte auf 2001 basieren, verschiebt ein vergessener Versatz jedes Datum um ~31 Jahre in die Vergangenheit. Negative Werte sind gültig und stehen für Daten vor 2001.
- Spaltennamen sind meist mit Z vorangestellt (Core Datas interne Benennung)
- Ein Wert von 0 bedeutet 2001-01-01, häufig als Standard-/ungesetztes Datum verwendet
- Zeiten werden in UTC gespeichert; wende die Anzeigezeitzone danach an
Verwandte Zeitstempelformat-Konverter
Core-Data-SQLite direkt lesen
Beim Untersuchen eines Core-Data-.sqlite-Stores ohne das Framework:
- Entitätstabellen sind mit Z vorangestellt (z. B. ZUSER); Datums-Attributspalten erhalten einen zusätzlichen ZDATE-artigen Präfix
- ZDATE-Werte sind Gleitkomma-CFAbsoluteTime — addiere 978307200, um einen Unix-Zeitstempel zu erhalten
- Ein NULL oder 0.0 in einer ZDATE-Spalte bedeutet, dass das Datum nie gesetzt wurde (oder auf das Referenzdatum selbst gesetzt ist)
- Die Tabelle Z_PRIMARYKEY ordnet Entitäts-IDs Zeilen-IDs zu, enthält aber keine Daten
- Für die Lesbarkeit in Abfragen: datetime(ZDATE + 978307200, "unixepoch") in SQLite
FAQ
- Welche Epoch verwendet Core Data?
- Core Data speichert Daten als Sekunden seit dem 1. Januar 2001 00:00:00 UTC, demselben Bezugsdatum wie CFAbsoluteTime/NSDate.
- Wie wandle ich ein Core-Data-ZDATE in ein echtes Datum um?
- Addiere 978.307.200 zum Wert, um einen Unix-Zeitstempel zu erhalten, und formatiere ihn dann — zum Beispiel SQLite datetime(ZDATE + 978307200, "unixepoch").
- Warum liegen meine Core-Data-Daten 31 Jahre daneben?
- Du hast den auf 2001 bezogenen Wert wahrscheinlich als Unix-Zeitstempel behandelt. Addiere den Versatz von 978.307.200 Sekunden, um ihn zu korrigieren.