#include <time.h>
#include <stdio.h>
int main() {
time_t t = (time_t)(1L << (sizeof(time_t)*8 - 9));
printf("%d\n", sizeof(time_t));
}
deve ser 1 em vez de 9, mas ctime não processa data maior:
8 - Sun Jun 13 07:26:08 1141709097
O tempo do meu sistema (64 bits, é claro) pode chegar a 1 milhão de anos a mais. A solução é atualizar os sistemas para 64 bits.
O problema é que os programas podem não lidar com isso. Especialmente antigo, propertário e não mantido. Os desenvolvedores estão acostumados a seguir fatos:
-
int
são 32 bits (na verdade, eles são preservados como 32 bits em sistemas de 64 bits, entre outros, porque foi assumido que eles são sempre de 32 bits)
- A maioria dos tipos (como
time_t
) pode ser convertida com segurança em int
No popular software FLOSS, ambas as coisas provavelmente não passarão pela revisão 'muitos olhos'. Em menos popular e propri- tário, dependerá largamente do autor.
Eu acho que no mundo livre * nix o 2038 vai ficar 'despercebido' enquanto eu espero problemas em plataformas "proprietárias" (ou seja, aquelas com grande número de software proprietário) - especialmente se parte da parte não for mantida.