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
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.