Horodatage, problème de l'année 2038 pour le système Ubuntu 64 bits

23

J'utilise un système Ubuntu 64 bits.

Je travaille actuellement sur un projet qui intègre MariaDB. Je prévois d’introduire une technique d’horodatage dans le projet pour que les gens reçoivent le bon moment pour différents fuseaux horaires.

J'ai entendu et lu des articles sur le problème de l'année 2038 pour l'horodatage. De nombreux articles suggèrent que nous utilisons un système 64 bits pour acheter un "peu" de temps.

Combien de temps ce "bit" fait-il référence? Est-ce assez long pour que nous puissions gérer les applications Web jusqu'au bout? Si ce n’est pas le cas, est-ce qu’il ne s’agit que d’une prolongation de deux ans alors, quand l’année 2040 sera arrivée, allons-nous avoir des applications qui ne fonctionnent pas correctement?

    
posée tet 17.09.2015 - 09:18
la source

2 réponses

33

Eh bien, si vous avez la possibilité d’acheter littéralement un "bit", c’est-à-dire de transférer un entier signé de 32 bits vers un entier non signé de 32 bits, les choses continueront à fonctionner en 2106.

Le transfert en 64 bits est "un peu mieux". Vous obtenez des milliards d'années de résolution.

Et Ubuntu fait ça:

$ uname -p
x86_64

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

Cependant, c'est le niveau du système d'exploitation. Juste parce qu'Ubuntu utilise un entier 64 bits pour ses temps ne signifie pas que MySQL / MariaDB l'utilisera pour stocker ses horodatages. Si les dates passées 2038 sont importantes pour vous, commencez immédiatement les tests.

En fait, je peux vous faire gagner du temps. C'est toujours cassé. Ce bogue a été signalé il y a plus d'une décennie , mais son test principal échoue toujours avec un int 64 bits.

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

Ce n'est même pas le stockage. C'est légèrement pathétique.

(Et oui, cela a été exécuté sur MariaDB, version 10.1)

    
réponse donnée Oli 17.09.2015 - 09:51
la source
6

Ne le stockez pas comme un entier du tout. Stockez-le sous la forme d'une chaîne de date formatée ISO 8601 . C'est le format standard utilisé sur Internet.

9999-12-31T23:59:59+00:00
    
réponse donnée dobey 17.09.2015 - 23:42
la source

Lire d'autres questions sur les étiquettes