Mac Absolute Time

Conversor de Mac Absolute Time para timestamp Unix

Converta Mac Absolute Time 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 — Mac Absolute Time (CFAbsoluteTime)
Timestamp Unix (s)

O que é o Mac Absolute Time?

O Core Foundation da Apple mede o tempo como CFAbsoluteTime: uma contagem de precisão dupla de segundos desde a data de referência de 1º de janeiro de 2001 00:00:00 UTC. Esse «Mac absolute time» aparece por todo o macOS e iOS, incluindo arquivos plist, o sistema de logging unificado e muitas APIs Cocoa.

  • Época: 2001-01-01 00:00:00 UTC (a data de referência do Cocoa/Core Foundation)
  • Tipo: segundos em ponto flutuante, então valores fracionários carregam precisão abaixo do segundo
  • Um valor atual gira em torno de 7,4 × 10^8 (menor que a marca de tempo Unix equivalente)
  • Visto em: CFAbsoluteTimeGetCurrent(), NSDate timeIntervalSinceReferenceDate, valores Date de plist

Como converter o Mac Absolute Time em tempo Unix

Há 978.307.200 segundos entre a época Unix (1970) e a época da Apple (2001). Some esse deslocamento para converter segundos da Apple em segundos Unix.

  • Unix seconds = MacAbsoluteTime + 978307200
  • Exemplo: 721692800 → 1700000000 → 2023-11-14 22:13:20 UTC
  • Inverso: MacAbsoluteTime = Unix seconds − 978307200
  • Swift: Date(timeIntervalSinceReferenceDate: t).timeIntervalSince1970

Formatos relacionados da Apple

O Core Data persiste datas como o mesmo valor CFAbsoluteTime, então o conversor de marca de tempo do Core Data usa o mesmo cálculo. Cuidado com valores que parecem marcas de tempo Unix — um valor baseado em 2001 aparecerá ~31 anos cedo demais se você esquecer o deslocamento.

  • O Core Data SQLite armazena colunas ZDATE como segundos desde 2001
  • Um valor solto perto de 7×10^8 é quase certamente tempo da Apple, não tempo Unix
  • Alguns valores de APNs e de logs usam a mesma data de referência

Conversores de formato de marca de tempo relacionados

Outros tipos de tempo da plataforma Apple

CFAbsoluteTime é a referência canônica da Apple, mas tipos relacionados aparecem nos frameworks da Apple:

  • NSDate tem o mesmo timeIntervalSinceReferenceDate subjacente (segundos desde 2001)
  • NSTimeInterval é o typedef para um valor de segundos em precisão dupla (nem sempre época da Apple — depende do contexto)
  • Os elementos <date> de plist são escritos como strings ISO 8601, não como CFAbsoluteTime cru — converta antes de persistir
  • As marcas de tempo do logging unificado do iOS e os eventos do Core Telephony geralmente usam CFAbsoluteTime
  • A saída do macOS log show imprime horários locais por padrão; as marcas de tempo de eventos cruas permanecem em UTC

FAQ

O que é o epoch do CFAbsoluteTime?
O CFAbsoluteTime conta segundos desde 1º de janeiro de 2001 00:00:00 UTC, a data de referência do Core Foundation/Cocoa.
Como converto o tempo absoluto do Mac em tempo Unix?
Some 978.307.200 segundos ao tempo absoluto do Mac para obter uma marca de tempo Unix em segundos.
O tempo absoluto do Mac é o mesmo que as marcas de tempo do Core Data?
Sim. O Core Data armazena datas como CFAbsoluteTime (segundos desde 2001), então a conversão é idêntica.