O que é o tempo Unix

O tempo Unix conta os segundos desde a meia-noite de 1º de janeiro de 1970 em UTC, o epoch. É assim que quase todos os sistemas operacionais, bancos de dados e protocolos guardam um instante: um único número, independente de fuso horário e horário de verão.

O número não informa a sua unidade. Dez dígitos são segundos, treze milissegundos como em JavaScript e Java, dezesseis microssegundos e dezenove nanossegundos. Para datas entre 1973 e 2286 o número de dígitos basta, e é isso que o modo automático faz.

O fuso só entra quando a data é escrita para uma pessoa: o mesmo timestamp é meia-noite em Londres e nove da noite em São Paulo. Por isso o resultado mostra tanto o UTC quanto o horário local do seu dispositivo.

Erros comuns

  • Ler milissegundos como segundos: um timestamp de treze dígitos lido em segundos cai dezenas de milhares de anos no futuro.
  • Omitir o fuso: uma data escrita sem ele pode ser lida em UTC por um programa e em horário local por outro.
  • Guardar os segundos em um inteiro de 32 bits com sinal: em 19 de janeiro de 2038 às 03:14:07 UTC o valor estoura e fica negativo.

Perguntas frequentes

O tempo Unix conta os segundos bissextos?

Não. Todo dia tem exatamente 86.400 segundos; quando um segundo bissexto é adicionado, os sistemas o repetem ou o diluem. Por isso o tempo Unix não é uma contagem exata dos segundos físicos decorridos.

O que é o problema do ano 2038?

Os sistemas que guardam os segundos em um inteiro de 32 bits com sinal chegam no máximo a 2.147.483.647, ou seja, 19 de janeiro de 2038. O segundo seguinte vira um número negativo, que corresponde a 1901.

Como obtenho o timestamp atual em um programa?

Em JavaScript Date.now() dá milissegundos, em Python time.time() segundos com decimais, em um terminal Linux date +%s segundos inteiros. O botão Agora faz o mesmo aqui.

Como funciona este cálculo

Data UTC = epoch (1970-01-01 00:00:00 UTC) + timestamp ÷ unidade. A unidade automática é: segundos abaixo de 10^11, milissegundos abaixo de 10^14, microssegundos abaixo de 10^17, senão nanossegundos. De uma data local subtrai-se o fuso em vigor naquela data, horário de verão incluído. A semana ISO é a que contém a quinta-feira: a semana 1 contém a primeira quinta-feira do ano.