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