Guia / limites

O problema do ano 2038

Entenda por que segundos Unix com sinal de 32 bits estouram em janeiro de 2038, quais sistemas são afetados e como testar.

O limite

Um inteiro com sinal de 32 bits armazena de −2.147.483.648 a 2.147.483.647. Interpretado como segundos Unix, o limite positivo é 2038-01-19T03:14:07Z. Adicionar um segundo estoura essa representação.

Quem deve verificar?

Sistemas operacionais antigos, dispositivos embarcados, colunas de banco e protocolos binários ainda podem usar segundos de 32 bits. Um timestamp de 64 bits ou tipo de data adequado leva o limite prático muito além da vida útil comum, mas toda a cadeia precisa estar preparada.

Como testar

Passe valores dos dois lados do limite pelo parser, armazenamento, serialização da API, runtime do cliente e relatórios. Um servidor moderno não protege automaticamente uma coluna antiga ou um protocolo de dispositivo.

Outros limites

Também verifique o intervalo de campos em milissegundos, inteiros seguros do JavaScript e restrições de APIs externas. Unidades e tipos diferentes atingem seus limites em datas diferentes.

Conferir o limite

Segundos UnixData UTC
21474836462038-01-19 03:14:06
21474836472038-01-19 03:14:07
21474836482038-01-19 03:14:08

O terceiro valor é válido em uma representação mais ampla. Ele ultrapassa o limite do inteiro de 32 bits com sinal, não a definição do tempo Unix. Confira no conversor selecionando segundos.

Esse tipo de inteiro vai de −2.147.483.648 a 2.147.483.647. Se um sistema antigo sofrer overflow em vez de rejeitar o valor, o próximo número pode se tornar negativo e mostrar uma data em 1901. A falha específica depende da plataforma e do armazenamento.

Auditar toda a cadeia de dados

Verifique a coluna no banco, o driver, o contrato da API, a serialização e o tipo na aplicação. Ampliar uma coluna não remove uma conversão para 32 bits em um cliente ou dispositivo. Grave e leia valores dos dois lados do limite; compare o inteiro armazenado, além da data.

Use um inteiro mais amplo ou um tipo de data suportado por toda a cadeia. Um inteiro de 32 bits sem sinal possui outro limite, mais distante, mas não resolve datas negativas nem todas as restrições de protocolos.

Separar os outros limites

O problema de 2038 envolve segundos de 32 bits com sinal. O limite de inteiros exatos do JavaScript e o intervalo de datas do navegador são questões diferentes. Milissegundos, microssegundos e nanossegundos exigem números maiores.

Consulte segundos e milissegundos. O conversor em lote ajuda a conferir um arquivo de migração, mas não inspeciona nem altera os tipos do seu sistema.

Normas e documentação técnica

Ferramentas / 01—06

Mais ferramentas de timestamp

Cada ferramenta parte de uma entrada específica e entrega uma resposta objetiva.