Le sujet de cette page est simple : calculer la date en jours juliens c'est à dire déterminer le nombre de jours écoulés depuis le 1 janvier 4713 à midi (Greenwich) avant notre ère. Cette échelle de temps est utile pour synchroniser les calendriers ; c'est celle qui est utilisée en astronomie pour dater les événements.
\\ Julien est en l'honneur de Jules Scaliger, le père du mathématicien \\ qui a introduit cette échelle de temps en 1583. Le calendrier \\ grégorien date de 1582. \\ Calcul de la date en jours juliens JD(J,M,A,h,m,s) = { local(AT,BT,JDT) ; if (M<3 , A = A-1; M = M+12); AT = floor(A/100); BT = 2-AT+floor(AT/4); JDT = floor(365.25*(A+4716)) +floor(30.6001*(M+1)) +J +(h+(m+s/60)/60)/24 +BT -1524.5; return(JDT); } \\ Calcul de la date en jours juliens rapportée à l'époque 2000 \\ Utile pour l'utilisation des théories planétaires actuelles JD2000(J,M,A,h,m,s) = JD(J,M,A,h,m,s)-JD(1,1,2000,12,0,0); \\ Calcul de la date calendaire à partir du JD \\ La valeur retounée est le vecteur [J,M,A,h,m,s,JS] \\ (JS est le jour de la semaine) CD(jd) = { local(a,A,B,C,D,E,F,G,h,m,s,Z); Z = floor(jd+0.5); F = jd+0.5-Z; if (Z>=2299161, a = floor((Z-1867216.25)/36524.25); A = Z+1+a-floor(a/4), A = Z; ); B = A+1524; C = floor((B-122.1)/365.25); D = floor(365.25*C); E = floor((B-D)/30.6001); G = B-D-floor(30.6001*E)+F; h = (G-floor(G))*24; m = (h-floor(h))*60; s = (m-floor(m))*60; if (E<14,E=E-1,E=E-13); if (floor(E)>2,C=C-4716,C=C-4715); return([floor(G),E,C,floor(h),floor(m),floor(s),(Z+1)%7]); }
MOIS = ["janvier","février","mars","avril","mai","juin",\ "juillet","août","septembre","octobre","novembre","décembre"]; JOURS = ["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]; \\ format degrés, minutes, secondes format_dms(d) = Str(d[1]"°"d[2]"'"floor(d[3])"''"); \\ format j mois AAAA, h:m:s format_date(d) = Str(JOURS[d[7]+1]" "d[1]" "MOIS[d[2]]" "d[3]\ ", "d[4]":"d[5]":"floor(d[6]));
\p 15 read("julien.gp"); read("format.gp"); outl("Calcul de la date en jours juliens","section"); oute("JD(4,11,2002,5,0,4)"); oute("JD(12,5,-40,12,0,0)"); outl("Calcul de la durée entre deux dates","section"); oute("a = JD(23,5,1983,17,0,0)"); oute("b = JD(20,1,1988,23,0,0)"); oute("b-a"); outl("Détermination de la date dans le calendrier <i>grégorien</i>","section"); oute("d = CD(2299160)"); out(fb("formaté : "),format_date(d)); oute("d = CD(2299161)"); out(fb("formaté : "),format_date(d)); oute("d = CD(2000000)"); out(fb("formaté : "),format_date(d)); outl("Réversibilité","section"); oute("a = JD(26,2,1848,15,20,0)"); oute("CD(a)");Calcul de la date en jours juliens JD(4,11,2002,5,0,4) -> 2452582.70837963 JD(12,5,-40,12,0,0) -> 1706582.00000000 Calcul de la durée entre deux dates a = JD(23,5,1983,17,0,0) -> 2445478.20833333 b = JD(20,1,1988,23,0,0) -> 2447181.45833333 b-a -> 1703.25000000000 Détermination de la date dans le calendrier grégorien d = CD(2299160) -> [4, 10, 1582, 12, 0, 0, 4] formaté : Jeudi 4 octobre 1582, 12:0:0 d = CD(2299161) -> [15, 10, 1582, 12, 0, 0, 5] formaté : Vendredi 15 octobre 1582, 12:0:0 d = CD(2000000) -> [14, 9, 763, 12, 0, 0, 3] formaté : Mercredi 14 septembre 763, 12:0:0 Réversibilité a = JD(26,2,1848,15,20,0) -> 2396084.13888888 CD(a) -> [26, 2, 1848, 15, 19, 59, 6]
Pour faire en sorte que certains résultats soient inscrits dans un fichier avec un préformatage HTML, j'utilise un petit script, c'est là que l'on trouve la définition des fonctions commençant par out
.
prevar(c) = return(Str(c" = ")); preexe(c) = return(Str(c" -> ")); fb(c) = return(Str("<b>"c"</b>")); fi(c) = return(Str("<i>"c"</i>")); out(c,e) = write(sortie,Str("<span class=\"out\">"c" "e"</span>")); outv(c) = out(prevar(c),eval(c)); oute(c) = out(preexe(c),eval(c)); outl(c,s) = write(sortie,Str("<span class=\""s"\">"c"</span>"));