Qual é o problema do Ano 2038?
O problema do Ano 2000 é hoje em dia compreendido pela maioria das pessoas devido à grande quantidade de atenção mediática que recebeu.
A maioria dos programas escritos na linguagem de programação C são relativamente imunes ao problema do Y2K, mas sofrem em vez disso do problema do Ano 2038. Este problema surge porque a maioria dos programas em C utiliza uma biblioteca de rotinas chamada biblioteca de tempo padrão . Esta biblioteca estabelece um formato padrão de 4 bytes para o armazenamento de valores de tempo, e também fornece um número de funções para converter, exibir e calcular valores de tempo.
Advertisement
O formato padrão de 4 bytes assume que o início do tempo é 1 de Janeiro de 1970, às 12:00:00 a.m. Este valor é 0. Qualquer valor de tempo/data é expresso como o número de segundos a seguir a esse valor zero. Assim, o valor 919642718 é 919.642.718 segundos depois das 12:00:00 da manhã de 1 de Janeiro de 1970, que é domingo, 21 de Fevereiro de 1999, às 16:18:38 hora do Pacífico (E.U.A.). Este é um formato conveniente porque se subtrair quaisquer dois valores, o que se obtém é um número de segundos que é a diferença de tempo entre eles. Depois pode usar outras funções na biblioteca para determinar quantos minutos/horas/dia/mês/ano passaram entre as duas vezes.
Se leu Como Funcionam os Bits e os Bytes, sabe que um inteiro assinado de 4 bytes tem um valor máximo de 2.147.483.647, e é daí que vem o problema do Ano 2038. O valor máximo de tempo antes de rolar para um valor negativo (e inválido) é de 2.147.483.647, o que se traduz em 19 de Janeiro de 2038. Nesta data, qualquer programa em C que utilize a biblioteca de tempo padrão começará a ter problemas com cálculos de datas.
Este problema é um pouco mais fácil de resolver do que o problema do Y2K nos mainframes, felizmente. Programas bem escritos podem simplesmente ser recompilados com uma nova versão da biblioteca que utiliza, por exemplo, valores de 8 bytes para o formato de armazenamento. Isto é possível porque a biblioteca encapsula a actividade a tempo inteiro com os seus próprios tipos de tempo e funções (ao contrário da maioria dos programas de mainframe, que não padronizaram os seus formatos de datas ou cálculos). Assim, o problema do Ano 2038 não deve ser tão difícil de resolver como o problema do Y2K foi.
Aqui estão alguns links interessantes:
Advertisement