// Input Jour Julien à convertir en DATE Delphi
_JD=2457669.44538
PRINT "Jour Julien à convertir: " _JD
GOSUB JD2Date:
DATETOSTR Date_ Date_$
PRINT "Date correspondante: " Date_$
// Note: DATETOSTR tronque les milli-secondes
END
//-----------------------------------------------------------------------------
// FUNCTION: JD2Date
//-----------------------------------------------------------------------------
// Conversion Jour Julien en Date Delphi
// Le paramètre d'entrée est _JD (une date en jour Julien)
// Le paramètre de sortie est Date_ (une date Delphi)
//
// Implémentation selon le livre de Jean Meeus - Astronomical Algorithms
//
// Valeur de test:
// _JD=2436116.31
// On doit avoir:
// Z=2436116, F=0.81
// alpha=15
// A=2436129
// B=2437653, C=6673, D=2437313, E=11
// jour décimal=4.81
// mois: 10
// année: 1957
JD2Date:
// 1 pour activer le debug de la fonction, 0 sinon
__DEBUGJJ2Date__=1
INT (_JD+0.5) Z
FRAC (_JD+0.5) F
IF Z<2299161
A=Z
alpha=0
ELSE
INT ((Z-1867216.25)/36524.25) alpha
INT (alpha/4) alpha0
A=(Z+1+alpha-alpha0)
ENDIF
B=A+1524
INT ((B-122.1)/365.25) C
INT (365.25*C) D
INT ((B-D)/30.6001) E
// OUT
// -----
// Jour décimal
INT (30.6001*E) jdec0
jdec=(B-D-jdec0+F)
// Jour Entier
INT jdec jr
// Mois
IF E<14
mr=(E-1)
ELSE
mr=(E-13)
ENDIF
// Année
IF mr>2
yr=(C-4716)
ELSE
yr=(C-4715)
ENDIF
// Heure
hrdec=(F*24)
INT hrdec hr
// Minute
mndec=((hrdec-hr)*60)
INT mndec mn
// Seconde
secdec=((mndec-mn)*60)
INT secdec sec
// Milli-Seconde
msecdec=((secdec-sec))*1000
INT (msecdec+0.5) msec
// DEBUG
IF __DEBUGJJ2Date__<>0
PRINT "Input JD:" _JD
Date$="=> "
IF jr<10
Date$=Date$+"0"
ENDIF
STR jr jr$
Date$=Date$+jr$+"/"
IF mr<10
Date$=Date$+"0"
ENDIF
STR mr mr$
Date$=Date$+mr$+"/"
STR yr yr$
Date$=Date$+yr$+" "
IF hr<10
Date$=Date$+"0"
ENDIF
STR hr hr$
Date$=Date$+hr$+":"
IF mn<10
Date$=Date$+"0"
ENDIF
STR mn mn$
Date$=Date$+mn$+":"
IF sec<10
Date$=Date$+"0"
ENDIF
STR sec sec$
Date$=Date$+sec$+"."
STR msec msec$
Date$=Date$+msec$
PRINT Date$
PRINT "-------------"
PRINT "Coefficients:"
PRINT "Z:" Z
STRF F 5 F$
PRINT "F:" F$
PRINT "alpha:" alpha " A:" A " B:" B " C:" C " D:" D " E:" E
PRINT "-------------"
STRF jdec 6 jdec$
PRINT "jdec:" jdec$
PRINT "jr:" jr
PRINT "mr:" mr
PRINT "yr:" yr
STRF hrdec 5 hrdec$
STRF mndec 5 mndec$
STRF secdec 5 secdec$
STRF msecdec 5 msecdec$
PRINT "-------------"
PRINT "Fraction du jour entre 0 et 1:"
PRINT "hrdec:" hrdec$ " mndec:" mndec$ " secdec:" secdec$ " msecdec:" msecdec$
PRINT "-------------"
ENDIF
ENCODEDATETIME yr mr jr hr mn sec msec DateResult
// Output
Date_=DateResult
RETURN
//-----------------------------------------------------------------------------