Core Data Timestamp

Conversor de Core Data para timestamp Unix

Converta Core Data em tempo Unix com a fórmula exata e suporte para valores grandes. Saída em segundos, milissegundos, ISO 8601 e formato legível.

segundos desde 01-01-2001 UTC

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

O que é uma marca de tempo do Core Data?

O framework Core Data da Apple armazena atributos Date como o número de segundos desde 1º de janeiro de 2001 00:00:00 UTC — a mesma data de referência CFAbsoluteTime usada no macOS e no iOS. Quando você abre um armazenamento do Core Data diretamente no SQLite, as colunas de data (frequentemente chamadas Z…DATE) aparecem como esses valores de ponto flutuante baseados em 2001.

  • Época: 2001-01-01 00:00:00 UTC
  • Tipo: segundos em ponto flutuante (precisão abaixo do segundo preservada)
  • Visto em: armazenamentos SQLite do Core Data, colunas ZDATE / Z_…_DATE, bancos .sqlite exportados
  • Data de referência idêntica a NSDate timeIntervalSinceReferenceDate

Como converter uma marca de tempo do Core Data em tempo Unix

Some a diferença de 978.307.200 segundos entre 1970 e 2001 para rebasear um valor do Core Data na época Unix.

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

Consultar armazenamentos SQLite do Core Data

Ler um banco de dados do Core Data diretamente é comum em perícia e depuração. Como os valores são baseados em 2001, um deslocamento esquecido empurra cada data ~31 anos para o passado. Valores negativos são válidos e representam datas anteriores a 2001.

  • Os nomes das colunas costumam ter o prefixo Z (a nomenclatura interna do Core Data)
  • Um valor 0 significa 2001-01-01, frequentemente usado como data padrão/não definida
  • Os horários são armazenados em UTC; aplique o fuso de exibição depois

Conversores de formato de marca de tempo relacionados

Lendo o SQLite do Core Data diretamente

Ao inspecionar um armazenamento .sqlite do Core Data sem o framework:

  • Tabelas de entidade têm o prefixo Z (ex.: ZUSER); colunas de atributo de data recebem um prefixo adicional no estilo ZDATE
  • Valores ZDATE são CFAbsoluteTime em ponto flutuante — some 978307200 para obter uma marca de tempo Unix
  • Um NULL ou 0.0 em uma coluna ZDATE significa que a data nunca foi definida (ou foi definida na própria data de referência)
  • A tabela Z_PRIMARYKEY mapeia IDs de entidade para IDs de linha, mas não contém datas
  • Para legibilidade em consultas: datetime(ZDATE + 978307200, "unixepoch") no SQLite

FAQ

Qual epoch o Core Data usa?
O Core Data armazena datas como segundos desde 1º de janeiro de 2001 00:00:00 UTC, a mesma data de referência de CFAbsoluteTime/NSDate.
Como converto um ZDATE do Core Data em uma data real?
Some 978.307.200 ao valor para obter uma marca de tempo Unix e depois formate-a — por exemplo, SQLite datetime(ZDATE + 978307200, "unixepoch").
Por que minhas datas do Core Data estão 31 anos defasadas?
Você provavelmente tratou o valor baseado em 2001 como uma marca de tempo Unix. Some o deslocamento de 978.307.200 segundos para corrigir.