Guide / limites

Le problème de l’an 2038

Pourquoi le dépassement de secondes Unix 32 bits signé en janvier 2038, quels systèmes sont concernés et comment vérifier le stockage en toute sécurité.

La frontière

Un entier signé de 32 bits peut stocker des valeurs comprises entre −2 147 483 648 et 2 147 483 647. Interprétée en secondes Unix, la limite positive est 2038-01-19T03:14:07Z. L'ajout d'une seconde dépasse cette représentation.

Qui devrait vérifier

Les anciens systèmes d'exploitation, les appareils intégrés, les colonnes de bases de données et les protocoles binaires peuvent toujours utiliser des secondes signées de 32 bits. Un horodatage de 64 bits ou un type de date approprié repousse les limites pratiques bien au-delà de la durée de vie ordinaire des applications.

Tests

Testez les valeurs des deux côtés de la frontière via la pile complète : analyseur, stockage, sérialisation des API, environnement d'exécution client et outils de reporting. Un serveur d'applications moderne ne protège pas une colonne de base de données ou un protocole de périphérique plus ancien.

Vérifiez la limite

Secondes UnixUTC
21474836462038-01-19 03:14:06
21474836472038-01-19 03:14:07
21474836482038-01-19 03:14:08

La troisième valeur est un horodatage valide dans une représentation plus large. Il dépasse l'entier signé maximum de 32 bits, et non la définition de l'heure Unix. Le convertisseur d'horodatage de ce site peut l'afficher lorsque les secondes sont sélectionnées.

Une valeur signée de 32 bits va de −2 147 483 648 à 2 147 483 647. Si un ancien système effectue un bouclage plutôt que de rejeter le débordement, la valeur suivante peut devenir un nombre négatif et apparaître en 1901. L'échec exact dépend de la langue, du système d'exploitation et du format de stockage.

Auditer le chemin de stockage complet

Vérifiez la colonne de base de données, la liaison du pilote, le schéma API, la couche de sérialisation et le type d'application. La migration uniquement de la colonne de base de données ne corrige pas une conversion 32 bits dans un client ou un périphérique intégré. Testez les valeurs immédiatement avant et après la limite, puis relisez-les et comparez l'entier stocké plutôt que seulement la date formatée.

Utilisez un entier plus large approprié ou un type de date documenté pris en charge dans tout le système. Un compteur de secondes non signé de 32 bits a une limite ultérieure différente ; cela ne résout pas les dates négatives ni tous les problèmes de compatibilité de protocole.

Distinguer les autres limites

Le problème de l'année 2038 concerne les secondes signées 32 bits. La limite d'entier sûr de JavaScript et la plage prise en charge par un navigateur sont des contraintes distinctes. Les millisecondes nécessitent une magnitude plus grande que les secondes pour le même instant ; les microsecondes et les nanosecondes peuvent dépasser la plage exacte d'un entier à virgule flottante beaucoup plus tôt.

Utilisez secondes versus millisecondes pour choisir l'échelle. Pour un fichier de migration, le batch converter peut vérifier les lignes, mais il ne peut pas inspecter ou réparer les types utilisés par votre système externe.

Normes et références d'exécution

Outils / 01—06

Plus d'outils d'horodatage

Chaque itinéraire commence par une entrée spécifique et donne une réponse spécifique.