Problema do ano 2038

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Este exemplo ilustra o reinício da contagem as 03:14:08 do dia 19 de janeiro de 2038.

O problema do ano 2038 (também conhecido como Y2K38, em referência ao Y2K) é uma falha na representação de datas em computadores, que pode causar erros em alguns programas de computador no ano de 2038.

O problema afeta os programas que utilizam a representação de tempo POSIX, em que a data é calculada através do número de segundos (ignorando os segundos bissextos) desde 1 de janeiro de 1970[1] . Esta representação é padrão nos sistemas operacionais do tipo Unix e afeta a maioria dos sistemas, pois grande parte deste software foi desenvolvido na linguagem C. Na maioria dos sistemas de 32 bits, o tipo de dados time t, utilizado para armazenar esta contagem de segundos, é um inteiro de 32 bits do tipo signed (considera o sinal). O último registro de tempo que pode ser representado por este formato, seguindo o padrão POSIX, é 03:14:07 na terça-feira 19 de janeiro de 2038 (UTC). Após este momento a data será representada por um número decimal negativo que, dependendo da implementação, corresponderá ao ano 1970 ou 1901. Este valor para a data corrente certamente resultará em erros de cálculo e de funcionamento na maior parte dos programas em execução pelo sistema.

Solução[editar | editar código-fonte]

Não há maneira simples de resolver este problema para os sistemas existentes. Alterar a definição do time_t para 64 bits pode quebrar a compatibilidade binária de softwares, dados persistidos e de qualquer sistema que manipule datas representadas no formato binário. Alterar o time_t para um inteiro de 32 bits unsigned (não considera o sinal) pode alterar vários programas que trabalham com diferenças de tempo.

A maioria dos sistemas que suportam a arquitetura de 64 bits já suportam o time_t de 64 bits. A migração para esta arquitetura já está em andamento e muitos esperam que ela esteja completa até 2038. Porém, milhões de sistemas de 32 bits foram instalados até o ano de 2006, muitos em sistemas embarcados, e é muito incerto se eles serão totalmente substituídos até 2038. Apesar de, normalmente, os sistemas serem atualizados num prazo de 18-24 meses, os sistemas embarcados podem operar sem alterações por toda a vida do sistema que controlam. A utilização do time_t de 32 bits foi codificada em alguns formatos de arquivo, como o ZIP, o que significa que o problema pode permanecer por um longo período após a expiração da vida útil das máquinas envolvidas.

A utilização de valores de 64 bits introduz um novo "corte" na data em aproximadamente 290 bilhões de anos, num domingo em 4 de dezembro de 292.277.026.596[2] . Claramente este problema não é uma questão imediata.

Ver também[editar | editar código-fonte]

Referências[editar | editar código-fonte]

  1. The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition (definition of epoch) IEEE and The Open Group The Open Group (2004). Visitado em 30 de julho 2010.
  2. Diomidis Spinellis. Code quality: the open source perspective.. illustrated. ed. [S.l.]: Adobe Press, 2006. ISBN 0321166078.

Ligações externas[editar | editar código-fonte]