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 Unix | Data UTC |
|---|---|
2147483646 | 2038-01-19 03:14:06 |
2147483647 | 2038-01-19 03:14:07 |
2147483648 | 2038-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.