Convertisseur Core Data vers timestamp Unix
Convertissez Core Data en temps Unix avec la formule exacte et la prise en charge des grandes valeurs. Sortie en secondes, millisecondes, ISO 8601 et format lisible.
secondes depuis le 01-01-2001 UTC
Qu'est-ce qu'un horodatage Core Data ?
Le framework Core Data d'Apple stocke les attributs Date comme le nombre de secondes depuis le 1er janvier 2001 00:00:00 UTC — la même date de référence CFAbsoluteTime utilisée sur macOS et iOS. Quand vous ouvrez un magasin Core Data directement dans SQLite, les colonnes de date (souvent nommées Z…DATE) apparaissent comme ces valeurs à virgule flottante basées sur 2001.
- Époque : 2001-01-01 00:00:00 UTC
- Type : secondes en virgule flottante (précision infra-seconde conservée)
- Présent dans : magasins SQLite Core Data, colonnes ZDATE / Z_…_DATE, bases .sqlite exportées
- Date de référence identique à NSDate timeIntervalSinceReferenceDate
Comment convertir un horodatage Core Data en temps Unix
Ajoutez l'écart de 978 307 200 secondes entre 1970 et 2001 pour rebaser une valeur Core Data sur l'époque Unix.
- Unix seconds = CoreDataTimestamp + 978307200
- Exemple : 721692800 → 1700000000 → 2023-11-14 22:13:20 UTC
- SQLite : datetime(ZDATE + 978307200, "unixepoch")
- Inverse : CoreDataTimestamp = Unix seconds − 978307200
Interroger les magasins SQLite Core Data
Lire une base Core Data directement est courant en criminalistique et débogage. Comme les valeurs sont basées sur 2001, un décalage oublié décale chaque date d'environ 31 ans dans le passé. Les valeurs négatives sont valides et représentent des dates antérieures à 2001.
- Les noms de colonnes sont généralement préfixés par Z (nommage interne de Core Data)
- Une valeur de 0 signifie 2001-01-01, souvent utilisée comme date par défaut/non définie
- Les heures sont stockées en UTC ; appliquez le fuseau d'affichage ensuite
Convertisseurs de format d'horodatage associés
Lire directement le SQLite de Core Data
Lors de l'inspection d'un magasin .sqlite Core Data sans le framework :
- Les tables d'entité sont préfixées par Z (p. ex. ZUSER) ; les colonnes d'attributs de date reçoivent un préfixe supplémentaire de style ZDATE
- Les valeurs ZDATE sont des CFAbsoluteTime à virgule flottante — ajoutez 978307200 pour obtenir un horodatage Unix
- Un NULL ou 0.0 dans une colonne ZDATE signifie que la date n'a jamais été définie (ou réglée sur la date de référence elle-même)
- La table Z_PRIMARYKEY associe les ID d'entité aux ID de ligne mais ne contient aucune date
- Pour la lisibilité dans les requêtes : datetime(ZDATE + 978307200, "unixepoch") en SQLite
FAQ
- Quelle epoch Core Data utilise-t-il ?
- Core Data stocke les dates en secondes depuis le 1er janvier 2001 00:00:00 UTC, la même date de référence que CFAbsoluteTime/NSDate.
- Comment convertir un ZDATE de Core Data en date réelle ?
- Ajoutez 978 307 200 à la valeur pour obtenir un horodatage Unix, puis formatez-le — par exemple, SQLite datetime(ZDATE + 978307200, "unixepoch").
- Pourquoi mes dates Core Data sont-elles décalées de 31 ans ?
- Vous avez probablement traité la valeur basée sur 2001 comme un horodatage Unix. Ajoutez le décalage de 978 307 200 secondes pour la corriger.