Core Data Timestamp

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

Aktuelle Zeit — Core-Data-Timestamp
Unix-Timestamp (s)

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.