Conversion Jour Julien => Date

L'utilisation et la création des scripts.
Répondre
Marc DELDEM
Messages : 1269
Enregistré le : 20 juin 2009, 01:01

Conversion Jour Julien => Date

Message par Marc DELDEM »

Bonsoir,

Dans Prism, il y a une fonction que permet de passer d'une Date Delphi (le 0 étant le 30/12/1899 à 0h00) au Jour Julien correspondant.

Code : Tout sélectionner

// Date courante
NOW CurDate
CONVERTDATETOJULIAN CurDate CurJJDate
PRINT "Jour Julien actuel:" CurJJDate
Mais pour l'inverse, comment passer d'une date en Jour Julien en une Date Delphi ?

Merci.
Marc
Cyril Cavadore
Messages : 4492
Enregistré le : 18 juin 2009, 22:41
Localisation : 42

Re: Conversion Jour Julien => Date

Message par Cyril Cavadore »

La voila, 10.1.18 ->

CONVERTJULIANTODATE JJDate Date
Cyril Cavadore, ALCOR-SYSTEM, Auteur de PRISM
http://www.alcor-system.com

Pour reporter vos problème, la marche à suivre est ici
viewtopic.php?f=7&t=1403
Marc DELDEM
Messages : 1269
Enregistré le : 20 juin 2009, 01:01

Re: Conversion Jour Julien => Date

Message par Marc DELDEM »

Merci Cyril.

J'avais fais ma procédure sous script à partir du bouquin de Jean Meeus - Astronomical Algorithms:

Code : Tout sélectionner

// 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
//-----------------------------------------------------------------------------
Marc
Cyril Cavadore
Messages : 4492
Enregistré le : 18 juin 2009, 22:41
Localisation : 42

Re: Conversion Jour Julien => Date

Message par Cyril Cavadore »

Ah oui tu peux aussi :-)
Cyril Cavadore, ALCOR-SYSTEM, Auteur de PRISM
http://www.alcor-system.com

Pour reporter vos problème, la marche à suivre est ici
viewtopic.php?f=7&t=1403
Répondre