Calcul des intervalles de temps

  1. Les jours juliens
  2. Commutation de calendrier
  3. La date de l'instant actuel
    1. La struct timeval du langage C
    2. L'objet Date de javascript
    3. Le DateTime de Microsoft
  4. Codes en javascript

Le calcul de la durée du temps écoulé entre deux événements est un problème fréquemment rencontré par les astronomes. Il faut pouvoir, étant donné deux dates quelconques, calculer la durée de l'intervalle de temps qui les sépare. Cela est obtenu par une fonctionnalité, qui étant donné une date (année, mois, jour, heure, minute, seconde, partie de seconde) fournit une valeur appelée jour julien qui représente cette date. La fonctionnalité réciproque permet de retrouver les éléments de la date à partir de la donnée de la valeur.

Les systèmes informatiques disposent de structures ou d'objets qui ne répondent que partiellement à cet objectif car ils ne sont définis que pour les dates postérieures au 1er janvier 1970 (struct timeval POSIX, Date java et javascript) ou au 3 janvier 0001 (DateTime Microsoft). Comme les astronomes s'intéressent à des événements qui se sont passés il y a très longtemps, par exemple des éclipses observées au temps des babyloniens, il faut pouvoir compter les durées depuis ces époques très reculées.

Les jours juliens

Le qualificatif julien ne doit pas abuser le lecteur. C'est juste un attribut affecté à la valeur pour la distinguer d'autres systèmes. En fait son calcul fait appel soit au calendrier julien, soit au calendrier grégorien en fonction de la date considérée.

Le jour julien est une simple valeur décimale. Son unité est la durée d'un jour, ce qui a pour conséquence que la différence des valeurs associées aux dates de 2 événements fournit le nombre de jours qui s'est écoulé entre eux. Si la différence vaut 0.25 c'est qu'il s'est écoulé 6h.

Pour l'époque ancienne on utilise le calendrier Julien qui n'a été réellement mis en oeuvre qu'en 46 av. J.-C. sous Jules César, mais on le prolonge dans le passé pour toute l'antiquité. Ce calendrier rend bissextiles toutes les années multiples de 4, sans exception.

Pour l'époque moderne on utilise le calendrier Grégorien qui a supprimé 10 jours en octobre 1582 : Le jeudi 4 octobre 1582 est immédiatement suivi du vendredi 15 octobre 1582. De plus le calendrier Grégorien supprime de la liste des années bissextiles les années qui sont multiples de 100 sans être multiple de 400.

Dans les calculs mathématiques on donne aux années avant J.-C. des valeurs négatives sauf pour l'an 1 av. J.-C. qui vaut 0. Ainsi il y a un décalage de 1 entre le numéro d'une année avant J.-C. et sa valeur mathématique.

Les valeurs attribuées au jours juliens sont positives après la date du 1er janvier 4713 av. J.-C. (-4712) et négatives avant cette date. Il s'est écoulé depuis cette date plus de 2 millions de jours !

La date du 1erjanvier de l'an 2000 à 12h TU joue un rôle particulier en astronomie. On l'appelle J2000. Elle correspond à la valeur jj = 2451545. Cette date sert souvent d'origine intermédiaire et au lieu de manipuler des valeurs de jj qui dépassent 2 millions, on manipule des valeurs dd = jj - J2000 qui sont moins impressionnantes.

Le système des jours juliens est essentiellement constitué de deux procédures :

La valeur de l'élément noté j est le jour du mois qui peut prendre des valeurs décimales.

A titre d'exemple dat2jul(10+(6+(20+10/60)/60)/24, 3, 1054) fournit la valeur 2106099.764 qui correspond au 10 mars de l'an 1054 à 6h20m10s

En plus de ces deux fonctions, dont le codage n'utilise aucune particularité du système informatique, il est souvent fait appel à deux autres fonctions :

Commutation de calendrier

La fonctions jul2dat() commute pour jj = 2299160 . Ainsi jj = 2299159.99999 correspond à la date du 4 octobre à 11h:59m:59s alors que jj = 2299160.00001 correspond à la date du 14 octobre à 12h00:01s.

La fonction dat2jul() utilise le calendrier julien jusqu'au 14 octobre 1582 à 23h59m59s date pour laquelle elle fournit la valeur 2299170.49999, pour revenir 10 jours juliens en arrière pour la date du 15 octobre 1582 à 0h pour laquelle elle utilise le calendrier grégorien et fournit la valeur 2299160.5

La date de l'instant actuel

Le jour julien de l'instant actuel est souvent noté jnow. Comme nous l'avons signalé son calcul fait appel à des fonctions spécifiques du langage et du système informatique. Comme ces procédures sont basées sur le temps TU, toute durée d'intervalle qui inclut l'incorporation d'une seconde intercalaire sera fausse d'une seconde.

La struct timeval du langage C

La struct timeval est une structure qui fournit le temps écoulé depuis le 1er janvier 1970 - 0h TU (origine définie par la norme POSIX). Cette structure comporte deux champs :

L'origine du temps Posix correspond au jour julien 2440587.5.

L'objet Date javascript

L'objet Date javascript comporte un attribut qui compte le temps écoulé en millisecondes depuis la même origine que la struct timeval du langage C (le 1er janvier 1970 - 0h TU). Ses attributs permettent de fixer ou d'accéder aux éléments année, mois, jour, heure, minute, seconde et milliseconde, qui correspondent à la date en temps local ou en temps universel, selon la fonction choisie.

Le DateTime Microsoft

Le DateTime qu'on trouve dans de nombreux langages modernes est une mesure du temps écoulé (en hectonanosecondes ou decimicrosecondes) depuis le 1er janvier 0001 à 0h TU du calendrier grégorien anticipé à cette date. Il offre l'accès à tous les éléments de date et de temps.

Attention, cet objet ignore la réforme grégorienne de 1582. Pour des périodes de temps à cheval sur la date de cette réforme il fournira des durées fausses. Son origine dans le calendrier julien en vigueur à son époque (de l'origine) n'est pas le 1er janvier mais le 3 janvier 0001 à 0h, date qui correspond au jour julien 1721425.5

Codes en javascript

Cliquer sur ce lien pour accéder au code javascript de ces 4 fonctions.