Conversor de Timestamp: Guia Completo
Timestamps Unix são a maneira fundamental de representar tempo em sistemas de computador. Este guia abrangente explica o que são timestamps, como funcionam e como lidar adequadamente com tempo em suas aplicações, incluindo os desafios traiçoeiros de fusos horários e horário de verão.
O Que é Timestamp Unix?
Um timestamp Unix (também chamado de tempo época ou tempo POSIX) é um número representando o número de segundos que se passaram desde a Época Unix: 00:00:00 UTC em 1 de janeiro de 1970, excluindo segundos bissextos. Este momento arbitrário serve como ponto de referência universal para sistemas de computador representarem tempo. Por exemplo, o timestamp 1609459200 representa exatamente 2021-01-01 00:00:00 UTC. O número simplesmente conta segundos desde 1970. Esta representação é simples, não ambígua e fácil para computadores trabalharem. Timestamps negativos representam datas antes de 1970. A beleza de timestamps Unix é sua simplicidade: é apenas um inteiro. Comparar tempos é comparação de inteiro. Calcular diferenças de tempo é subtração. Armazenar tempo é armazenar número. Nenhum parsing de string, nenhuma ambiguidade de formato, nenhuma confusão de fuso horário (timestamps são sempre UTC). Timestamps Unix vêm em variações: Timestamp Unix padrão (segundos desde época) é mais comum. Timestamp de milissegundos (usado por JavaScript Date.getTime()) multiplica por 1000. Timestamp de microssegundos (usado em alguns sistemas) multiplica por 1.000.000. Timestamp de nanossegundos (precisão máxima) multiplica por 1.000.000.000. Sempre saiba qual precisão você está usando. O "problema do ano 2038" afeta sistemas de 32 bits. Um inteiro de 32 bits com sinal pode representar timestamps até 2.147.483.647 segundos, que é 03:14:07 UTC em 19 de janeiro de 2038. Depois disto, inteiros de 32 bits transbordam. Sistemas modernos usam inteiros de 64 bits, que podem representar tempo por bilhões de anos. Se você ainda está usando timestamps de 32 bits, migre para 64 bits antes de 2038. Timestamps Unix são universais através de plataformas. Unix, Linux, macOS, Windows (através de conversões), bancos de dados e linguagens de programação todos suportam timestamps Unix. Esta universalidade os torna ideais para troca de dados e armazenamento.
Trabalhando com Fusos Horários
Fusos horários são uma das partes mais desafiadoras de lidar com tempo em programação. Entender como timestamps e fusos horários interagem é crucial para aplicações corretas. Timestamps Unix são sempre UTC. O timestamp 1609459200 representa o mesmo momento absoluto para todos em todo o mundo, independentemente do fuso horário deles. Quando você vê "2021-01-01 00:00:00", isso é meia-noite UTC, não meia-noite no seu fuso horário local. Conversão de fuso horário acontece em exibição, não em armazenamento. Sempre armazene timestamps em UTC. Quando exibe para usuários, converta para seu fuso horário local. Esta separação mantém dados consistentes enquanto apresenta tempo familiar ao usuário. Armazenar timestamps locais causa confusão massiva, especialmente quando usuários cruzam fusos horários. Horário de verão (DST) complica tudo. Quando relógios "saltam à frente" uma hora, há um buraco—tempos locais entre 2:00 AM e 3:00 AM não existem naquele dia. Quando relógios "caem para trás," há duplicatas—tempos locais entre 1:00 AM e 2:00 AM acontecem duas vezes. Timestamps Unix não têm este problema porque são UTC, e UTC nunca observa horário de verão. Compensações de fuso horário não são fixas. "América/Nova_Iorque" é UTC-5 em inverno mas UTC-4 em verão. Regras DST mudam—governos às vezes alteram quando horário de verão começa/termina ou até eliminam DST inteiramente. Use bibliotecas de fuso horário (tz database) que são atualizadas regularmente para mudanças de regra. Fusos horários nomeados vs. compensações: UTC+5 é uma compensação, mas "Ásia/Karachi" é um fuso horário nomeado. Fusos horários nomeados lidam com DST corretamente. Compensações não. Sempre use fusos horários nomeados quando possível. Se você deve armazenar fuso horário, armazene o nome ("América/Sao_Paulo"), não a compensação (UTC-3). Melhores práticas: Armazene todos timestamps em UTC (timestamps Unix são perfeitos). Armazene fuso horário do usuário separadamente se necessário. Converta para fuso horário local apenas para exibição. Nunca faça aritmética de data/hora em tempo local—converta para UTC, calcule, então converta de volta. Use biblioteca de tempo respeitável (Luxon, date-fns, Moment.js) ao invés de escrever lógica de fuso horário você mesmo. Para aplicações web: JavaScript Date funciona em timestamps de milissegundos mas fusos horários são complicados. APIs Intl.DateTimeFormat e toLocaleString() ajudam com exibição. Bibliotecas como Luxon simplificam muito manipulação de fuso horário. Para aplicações mobile, frameworks têm suporte embutido de fuso horário. Use-o.
Conversão e Formatação
Converter entre timestamps e datas legíveis por humanos é operação comum. Entender como fazer isto corretamente previne bugs sutis. Timestamp para data: Pegue o timestamp, multiplique por 1000 se necessário (JavaScript usa milissegundos), crie objeto de data, formate como necessário. JavaScript: new Date(1609459200 * 1000) cria objeto Date. Python: datetime.fromtimestamp(1609459200, tz=timezone.utc). PHP: date('Y-m-d H:i:s', 1609459200). SQL: FROM_UNIXTIME(1609459200). Data para timestamp: Parse string de data para objeto de data, extraia timestamp. JavaScript: Math.floor(new Date('2021-01-01').getTime() / 1000). Python: int(datetime(2021, 1, 1, tzinfo=timezone.utc).timestamp()). PHP: strtotime('2021-01-01 00:00:00'). SQL: UNIX_TIMESTAMP('2021-01-01 00:00:00'). Formatação de data varia por local. EUA: MM/DD/YYYY. Europa: DD/MM/YYYY. ISO 8601: YYYY-MM-DD. Use formato ISO 8601 para intercâmbio de dados—é não ambíguo e ordenável. Para exibição de usuário, respeite suas preferências de local. Parsing de data é perigoso. "01/02/2021" é 2 de janeiro ou 1 de fevereiro? Depende do local. Sempre use formatos explícitos ou ISO 8601 ao parsear. Nunca confie em parsing de formato de data ambíguo. Validar entrada rigorosamente. Formato ISO 8601 é seu amigo: YYYY-MM-DD para datas, HH:MM:SS para tempos, YYYY-MM-DDTHH:MM:SSZ para timestamps completos (Z indica UTC). Com fusos horários: YYYY-MM-DDTHH:MM:SS±HH:MM. Este formato é não ambíguo, ordenável e amplamente suportado. Timestamps de milissegundos vs. segundos: JavaScript usa milissegundos. A maioria dos outros sistemas usa segundos. Sempre saiba qual você está usando. Converter incorretamente resulta em datas em 1970 ou ano 50.000. Se você vê data em 1970, provavelmente esqueceu de multiplicar por 1000. Se você vê data em futuro distante, provavelmente multiplicou quando não deveria. Precisão importa: Segundos (timestamp Unix padrão) são adequados para a maioria de logs e timestamps de eventos. Milissegundos são necessários para desempenho de aplicação e análise detalhada. Microssegundos/nanossegundos são para aplicações de alta precisão como sistemas financeiros. Fuso horário em exibição: Sempre mostre a usuários em que fuso horário uma data está. "2021-01-01 00:00:00" é ambígua. "2021-01-01 00:00:00 UTC" ou "2021-01-01 00:00:00 America/Sao_Paulo" é clara. Muitas aplicações web mostram tempos locais do usuário automaticamente usando JavaScript, que é bom se claramente comunicado.
Testar a Ferramenta
Conversor de Timestamp
Saiba Mais
Perguntas Frequentes
Conversor de Timestamp
Perguntas Frequentes →