Core Data Timestamp

Convertitore da Core Data a timestamp Unix

Converti Core Data in tempo Unix con la formula esatta e supporto per valori grandi. Output in secondi, millisecondi, ISO 8601 e formato leggibile.

secondi dal 01-01-2001 UTC

Ora corrente — Timestamp Core Data
Timestamp Unix (s)

Che cos'è un timestamp di Core Data?

Il framework Core Data di Apple memorizza gli attributi Date come numero di secondi dal 1° gennaio 2001 00:00:00 UTC — la stessa data di riferimento CFAbsoluteTime usata su macOS e iOS. Quando apri uno store Core Data direttamente in SQLite, le colonne di data (spesso chiamate Z…DATE) compaiono come questi valori in virgola mobile basati sul 2001.

  • Epoca: 2001-01-01 00:00:00 UTC
  • Tipo: secondi in virgola mobile (la precisione sotto il secondo è preservata)
  • Si trova in: store SQLite di Core Data, colonne ZDATE / Z_…_DATE, database .sqlite esportati
  • Data di riferimento identica a NSDate timeIntervalSinceReferenceDate

Come convertire un timestamp di Core Data in tempo Unix

Aggiungi il divario di 978.307.200 secondi tra 1970 e 2001 per riportare un valore Core Data sull'epoca Unix.

  • Unix seconds = CoreDataTimestamp + 978307200
  • Esempio: 721692800 → 1700000000 → 2023-11-14 22:13:20 UTC
  • SQLite: datetime(ZDATE + 978307200, "unixepoch")
  • Inverso: CoreDataTimestamp = Unix seconds − 978307200

Interrogare gli store SQLite di Core Data

Leggere un database Core Data direttamente è comune in forense e debug. Poiché i valori si basano sul 2001, un offset dimenticato sposta ogni data di ~31 anni nel passato. I valori negativi sono validi e rappresentano date precedenti al 2001.

  • I nomi delle colonne hanno di solito il prefisso Z (la nomenclatura interna di Core Data)
  • Un valore 0 significa 2001-01-01, spesso usato come data predefinita/non impostata
  • Gli orari sono memorizzati in UTC; applica il fuso di visualizzazione dopo

Convertitori di formato timestamp correlati

Leggere direttamente lo SQLite di Core Data

Quando ispezioni uno store .sqlite di Core Data senza il framework:

  • Le tabelle delle entità hanno il prefisso Z (es. ZUSER); le colonne degli attributi data ricevono un ulteriore prefisso in stile ZDATE
  • I valori ZDATE sono CFAbsoluteTime in virgola mobile — aggiungi 978307200 per ottenere un timestamp Unix
  • Un NULL o 0.0 in una colonna ZDATE significa che la data non è mai stata impostata (o impostata sulla data di riferimento stessa)
  • La tabella Z_PRIMARYKEY mappa gli ID delle entità agli ID di riga ma non contiene date
  • Per la leggibilità nelle query: datetime(ZDATE + 978307200, "unixepoch") in SQLite

FAQ

Quale epoch usa Core Data?
Core Data memorizza le date come secondi dal 1° gennaio 2001 00:00:00 UTC, la stessa data di riferimento di CFAbsoluteTime/NSDate.
Come converto uno ZDATE di Core Data in una data reale?
Aggiungi 978.307.200 al valore per ottenere un timestamp Unix, poi formattalo — per esempio, SQLite datetime(ZDATE + 978307200, "unixepoch").
Perché le mie date Core Data sono sfasate di 31 anni?
Probabilmente hai trattato il valore basato sul 2001 come un timestamp Unix. Aggiungi l'offset di 978.307.200 secondi per correggerlo.