Core Data Timestamp

Convertidor de Core Data a timestamp Unix

Convierte Core Data a tiempo Unix con la fórmula exacta y soporte para valores grandes. Salida en segundos, milisegundos, ISO 8601 y formato legible.

segundos desde el 01-01-2001 UTC

Hora actual — Timestamp de Core Data
Timestamp Unix (s)

¿Qué es una marca de tiempo de Core Data?

El framework Core Data de Apple almacena los atributos Date como el número de segundos desde el 1 de enero de 2001 00:00:00 UTC — la misma fecha de referencia CFAbsoluteTime usada en macOS e iOS. Cuando abres un almacén de Core Data directamente en SQLite, las columnas de fecha (a menudo llamadas Z…DATE) aparecen como estos valores en coma flotante basados en 2001.

  • Época: 2001-01-01 00:00:00 UTC
  • Tipo: segundos en coma flotante (se conserva la precisión por debajo del segundo)
  • Se ve en: almacenes SQLite de Core Data, columnas ZDATE / Z_…_DATE, bases de datos .sqlite exportadas
  • Fecha de referencia idéntica a NSDate timeIntervalSinceReferenceDate

Cómo convertir una marca de tiempo de Core Data a tiempo Unix

Suma la diferencia de 978.307.200 segundos entre 1970 y 2001 para rebasar un valor de Core Data a la época Unix.

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

Consultar almacenes SQLite de Core Data

Leer una base de datos de Core Data directamente es común en informática forense y depuración. Como los valores se basan en 2001, un desfase olvidado desplaza cada fecha ~31 años al pasado. Los valores negativos son válidos y representan fechas anteriores a 2001.

  • Los nombres de columna suelen llevar el prefijo Z (la nomenclatura interna de Core Data)
  • Un valor de 0 significa 2001-01-01, usado con frecuencia como fecha por defecto/sin establecer
  • Los tiempos se almacenan en UTC; aplica la zona horaria de visualización después

Conversores de formato de marca de tiempo relacionados

Leer SQLite de Core Data directamente

Al inspeccionar un almacén .sqlite de Core Data sin el framework:

  • Las tablas de entidad llevan el prefijo Z (p. ej. ZUSER); las columnas de atributos de fecha reciben un prefijo adicional al estilo ZDATE
  • Los valores ZDATE son CFAbsoluteTime en coma flotante — suma 978307200 para obtener una marca de tiempo Unix
  • Un NULL o 0.0 en una columna ZDATE significa que la fecha nunca se estableció (o se estableció en la propia fecha de referencia)
  • La tabla Z_PRIMARYKEY mapea IDs de entidad a IDs de fila pero no contiene fechas
  • Para legibilidad en consultas: datetime(ZDATE + 978307200, "unixepoch") en SQLite

FAQ

¿Qué epoch usa Core Data?
Core Data almacena las fechas como segundos desde el 1 de enero de 2001 00:00:00 UTC, la misma fecha de referencia que CFAbsoluteTime/NSDate.
¿Cómo convierto un ZDATE de Core Data a una fecha real?
Suma 978 307 200 al valor para obtener una marca de tiempo Unix y luego formatéala — por ejemplo, SQLite datetime(ZDATE + 978307200, "unixepoch").
¿Por qué mis fechas de Core Data están desfasadas 31 años?
Probablemente trataste el valor basado en 2001 como una marca de tiempo Unix. Suma el desfase de 978 307 200 segundos para corregirlo.