Français

Outils de développement · Convertisseur d'horodatage Unix

Horodatages Unix négatifs : comment les dates antérieures à 1970 sont représentées

· Comment ça marche

horodatages Validation unix-time formats de données

Une chronologie s'étendant à gauche de l'époque 1970 jusqu'aux valeurs négatives
Illustration vectorielle originale de ToolAcre

Le temps Unix compte à partir de 1970, mais il compte également à rebours. Cet article explique ce que signifie une époque négative, comment −1 devient la dernière seconde de 1969 et où les systèmes qui supposent des valeurs positives se brisent.

Une date de naissance avec un signe moins — un utilisateur né en 1965 stockée sous forme d'entier négatif et le code qui l'a traité comme une erreur

Un enregistrement pour une personne née avant 1970 peut légitimement contenir un horodatage Unix négatif. Le rejet de chaque signe moins initial convertit un choix de représentation en un bug de perte de données. L'analyseur de ToolAcre accepte un signe facultatif et `fromEpoch` marque une valeur interprétée en millisecondes inférieure à zéro comme `beforeEpoch` plutôt que de la traiter comme invalide.

L'écran ajoute ensuite une note expliquant que l'instant précède l'époque Unix. C'est plus efficace que le rendu silencieux d'une date, car cela permet de garder le signe inhabituel visible pour le réviseur. Si un schéma en amont interdit les valeurs négatives, l'échec appartient à ce schéma ou à cette migration, et non à l'arithmétique qui mappe les comptes des deux côtés de zéro.

Entiers signés et époque — pourquoi time_t est signé et à quoi −1 et −86400 correspondent

Zéro vaut 1970-01-01T00:00:00.000Z. Les tests du référentiel prouvent que −1 seconde est l'instant immédiatement précédent, `1969-12-31T23:59:59.000Z`. De même, −86,400 secondes est un jour POSIX fixe avant zéro. L'arithmétique signée rend l'axe continu au lieu de nécessiter une seconde époque pour les enregistrements plus anciens.

Le plan attribuait le stockage signé à `time_t`, mais ce code n'établit pas l'historique de conception ou le type utilisé par chaque plate-forme. Ses preuves plus étroites suffisent : les nombres JavaScript peuvent être négatifs, la détection utilise la magnitude absolue et Date peut formater le résultat. Décrivez le type déclaré du champ producteur séparément de l’entrée acceptée par le convertisseur.

Arithmétique d'époque signée autour de zéro, sans prétendre pourquoi chaque fois_t a choisi son type

Les valeurs négatives conservent la même distinction d'unité que les valeurs positives. `−1000` secondes pointe 1,000 secondes avant l'époque, alors que `−1000` millisecondes pointe seulement une seconde avant elle. La détection automatique traite les deux comme des secondes car leur ampleur est inférieure à 10¹¹, donc un court décompte en millisecondes avant l'époque nécessite la sélection explicite des millisecondes.

Il s'agit d'un échec concret du folklore du décompte des chiffres. Un développeur voyant un signe moins et quatre chiffres ne peut pas déduire l'unité à partir de son apparence. Utilisez le contrat source, choisissez le sélecteur et inspectez la note d'unité. La règle d'ampleur de ToolAcre est une valeur par défaut pour les données typiques, et ne remplace pas les métadonnées sur les valeurs historiques proches de 1970.

Là où les valeurs négatives échouent : systèmes qui utilisent −1 comme sentinelle, stockage non signé, sélecteurs de date qui bloquent et langages qui les rejettent

En dehors du convertisseur, `−1` est parfois réservé comme sentinelle des valeurs manquantes, et une colonne non signée ne peut conserver aucun instant négatif. Ce sont des possibilités de conception courantes, mais le référentiel ne peut pas certifier le comportement d'une base de données, d'un sélecteur de date ou d'un langage particulier. Testez la limite réelle avant de déplacer les dates d’archives à travers elle.

Une sonde utile contient trois valeurs : null ou le marqueur manquant documenté, −1 et une date clairement plus ancienne. Si −1 disparaît alors que l'ancienne valeur survit, la gestion sentinelle est impliquée ; si tous les négatifs échouent, inspectez le type et la validation. Ne « corrigez » pas le symptôme en ajoutant 1970 ans ou en prenant une valeur absolue, car les deux créent des instants différents.

Exemple pratique : conversion de −14182940 — l'arithmétique en une date de juillet 1969 en UTC et dans une zone locale à l'ouest de Greenwich

Pendant −14,182,940 secondes, commencez à l'époque et reculez 164 complétez 86,400 secondes jours, laissant 13,340 secondes. Le reste est de 3 heures, 42 minutes et 20 secondes. La lecture UTC résultante est `1969-07-20T20:17:40.000Z`, un instant choisi ici spécifiquement pour cet article.

Une lecture locale à l'ouest de UTC peut afficher une heure d'horloge murale antérieure ou même une autre date, mais son résultat exact dépend de la zone du navigateur et des règles internationales. Lisez-le depuis le panel plutôt que de publier une réponse universelle. La vérification fixe est la ligne ISO ; la ligne locale est une annotation environnementale sur ce même compte négatif.

Exemple pratique : conversion de −14,182,940 avec une arithmétique UTC vérifiable

ToolAcre vérifie sa valeur interprétée par rapport à ±8.64×10¹⁵ millisecondes, la plage de dates indiquée dans la source. Cela prouve également la conversion de −2,208,988,800 secondes en `1900-01-01T00:00:00.000Z`. Ces faits montrent que l'itinéraire arrive bien avant 1970 sans impliquer que chaque système de stockage peut transporter la même portée.

Un champ 32-bit signé a un intervalle mathématique plus étroit que JavaScript Date, mais le convertisseur n'inspecte pas la largeur d'un champ lorsque vous collez un nombre. Conserver le type de source dans un audit. Une conversion réussie du navigateur démontre ici la représentabilité, et non un aller-retour sécurisé via le micrologiciel, les colonnes SQL ou les protocoles binaires ailleurs.

La plage de dates du convertisseur est connue ; les limites externes de 32 bits dépendent de leur type de stockage

Transformer un décompte en date JavaScript ne reconstruit pas le calendrier civil réellement imprimé à chaque endroit il y a des siècles. L'implémentation utilise le modèle de date de la plateforme et renvoie une représentation ISO ; il ne contient aucun sélecteur de calendrier historique, aucune archive locale ou source documentaire pour les réformes du calendrier. Ces affirmations sont intentionnellement absentes.

Pour les enregistrements logiciels modernes, la représentation de la machine proleptique peut encore être exactement le contrat dont vous avez besoin. Pour la généalogie, l’histoire juridique ou la transcription archivistique, conservez la date écrite originale et son contexte calendaire aux côtés de toute époque dérivée. Un nombre triable pratique ne devrait pas effacer l’incertitude que la conversion ne peut pas résoudre.

Les affirmations sur l'historique du calendrier ne font pas partie des preuves de ce convertisseur

Négatif est une direction sur l'axe des époques, pas une catégorie d'erreur. ToolAcre l'analyse, applique les mêmes règles de secondes ou de millisecondes par ampleur et marque le résultat comme avant l'époque. Ce comportement permet à un réviseur de distinguer un ancien instant légitime d'une sentinelle ou d'une panne de stockage non signée ailleurs.

Lors de l'audit de données antérieures à 1970, indiquez l'unité, le type de source et la convention de valeur manquante avant d'interpréter le signe. Comparez ensuite le résultat ISO avec un enregistrement connu. Le signe seul a un sens arithmétique ; le schéma environnant détermine si le producteur avait l'intention de faire cette arithmétique ou s'il a utilisé le même nombre comme valeur de contrôle.