Back

Os computadores vão parar em 2038? (O problema Y2K38)

No final de 1999, o mundo temia o 'Bug do Milênio'. Esperava-se que computadores armazenando anos como dois dígitos (99) interpretassem 2000 como 1900, causando caos.

Agora, um problema semelhante, talvez mais sério, está se aproximando.

É o Problema do Ano 2038.

1. Unix Time

Como os computadores armazenam o tempo? A maioria dos sistemas usa o Unix Time.

Isso conta o número de segundos que se passaram desde 1º de janeiro de 1970, 00:00:00 (UTC).

Por exemplo, no momento em que escrevo isto, cerca de 1,7 bilhão de segundos se passaram desde 1970.

2. O Limite de 32 bits

O problema é que muitos sistemas e softwares mais antigos usam um Inteiro de 32 bits com sinal para armazenar esse valor.

O valor máximo que um inteiro de 32 bits pode conter é 2.147.483.647.

Convertido para Unix Time, isso corresponde exatamente a 19 de janeiro de 2038, 03:14:07 (UTC).

3. Quando Esse Dia Chegar

O que acontece 1 segundo após esse horário?

O número estourará seu valor máximo e voltará ao valor mínimo, -2.147.483.648.

O sistema interpretará esse horário como 13 de dezembro de 1901.

Isso pode causar:

  • Falha nos cálculos de data do banco de dados.
  • Sistemas de agendamento marcando compromissos no passado.
  • Dispositivos embarcados ou servidores legados travando.

4. A Solução

A solução é simples, mas cara: estender a variável de tempo para 64 bits.

O valor máximo de um inteiro de 64 bits é de cerca de 9 quintilhões. Isso pode representar um período de tempo muito maior do que a idade do universo (cerca de 290 bilhões de anos), tornando-o efetivamente seguro para sempre.

Sistemas operacionais e linguagens modernos de 64 bits já usam tempo de 64 bits. A preocupação reside em dispositivos embarcados de 32 bits e código legado ainda em operação.

Conclusão

2038 parece distante, mas sistemas que lidam com contratos de longo prazo ou pensões já podem estar encontrando problemas.

Como desenvolvedor, vale a pena verificar se as variáveis de data em seu código são de 32 bits ou 64 bits. É o primeiro passo para evitar um desastre futuro.

TechUnixTimeBug

Explore ferramentas relacionadas

Experimente estas ferramentas gratuitas do Pockit