Timestamp, problema do ano 2038 para o sistema Ubuntu de 64 bits

23

Estou usando o sistema Ubuntu de 64 bits.

Atualmente, estou trabalhando em um projeto que incorpora o MariaDB. Estou planejando introduzir a técnica de timestamp no projeto para que as pessoas recebam a hora correta para um fuso horário diferente.

Eu ouvi e li alguns artigos sobre o problema do ano 2038 para o timestamp. Muitos artigos sugerem que usemos um sistema de 64 bits para comprar um “bit” a mais de tempo.

Quanto tempo esse bocado se refere? É tempo suficiente para podermos gerenciar aplicativos da web até o final? Se esse não é o caso, é como apenas dois anos de extensão, então, quando chegar o ano 2040, teremos aplicativos que não funcionem adequadamente?

    
por tet 17.09.2015 / 09:18

2 respostas

33

Bem, se há uma opção para literalmente comprar um "bit", ou seja, transferir de um inteiro de 32 bits assinado para um inteiro de 32 bits sem sinal, as coisas continuam funcionando em 2106.

A transferência para 64 bits é "um pouco melhor". Você recebe centenas de bilhões de anos de resolução.

E o Ubuntu faz isso:

$ uname -p
x86_64

$ date --date=9090-01-01 +%s
224685532800

No entanto, esse é o nível do sistema operacional. Só porque o Ubuntu usa um inteiro de 64 bits para seus tempos não significa que o MySQL / MariaDB irá usá-lo para armazenar seus timestamps. Se as datas anteriores a 2038 forem importantes para você agora, comece a testar imediatamente.

Na verdade, posso poupar algum tempo. Ainda está quebrado. Este bug foi relatado há mais de uma década , mas seu teste principal ainda falha com um int de 64 bits.

mysql> select from_unixtime(2548990800);
+---------------------------+
| from_unixtime(2548990800) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

Isso nem é armazenamento. É um pouco patético.

(E sim, isso foi executado no MariaDB, versão 10.1)

    
por Oli 17.09.2015 / 09:51
6

Não armazene como um inteiro. Armazene-o como uma string de data formatada pela ISO 8601 . Este é o formato padrão usado na Internet.

9999-12-31T23:59:59+00:00
    
por dobey 17.09.2015 / 23:42