Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Date <-> Date julienne | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Date <-> Date julienne Sam 18 Sep 2010 - 22:42 | |
| Trouvé sur le net, les formules de conversion de date (Année, Mois, Jour) en date julienne (JD = un nombre). Conversion date (Annee, Mois, Jour) en date julienne (JD) - Code:
-
IF Mois < 3 THEN Mois = Mois + 12: Annee = Annee - 1 A = INT(Annee/100) B = INT(A/4) C = 2-A+B E = INT(365.25*(Annee+4716)) F = INT(30.6001*(Mois+1)) JD = C+Jour+E+F-1524.5 Conversion date julienne (JD) en date (Jour, Mois, Année) - Code:
-
Z = JD+0.5 W = INT((Z - 1867216.25)/36524.25) X = INT(W/4) A = Z+1+W-X B = A+1524 C = INT((B-122.1)/365.25) D = INT(365.25 * C) E = INT((B-D)/30.6001) F = INT(30.6001*E) Jour = B-D-F Mois = E-1: IF Mois > 12 THEN Mois = Mois - 12 Annee = C-4716: IF Mois < 3 THEN Annee = Annee + 1 Pratique pour effectuer des calculs sur les dates: calculer par exemple le nombre de jours entre deux dates, le nombre de jours écoulés depuis la naissance, etc. Màj le 19/9 à 17h40
Dernière édition par JL35 le Dim 19 Sep 2010 - 18:09, édité 2 fois | |
| | | Invité Invité
| Sujet: Re: Date <-> Date julienne Sam 18 Sep 2010 - 22:53 | |
| Super ! Tu peux aussi utiliser le logiciel Calendes. Juste ici. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Date <-> Date julienne Sam 18 Sep 2010 - 23:13 | |
| Certes ! mais c'est plus amusant de programmer soi-même ses outils. Et puis apparemment ce logiciel calcule certaines dates particulières, mais ne permet pas de calculs entre deux dates, ce qui est justement le but de la notice ci-dessus. | |
| | | 659_minifly
Nombre de messages : 590 Age : 76 Localisation : Valenciennes Nord Date d'inscription : 29/04/2010
| Sujet: Re: Date <-> Date julienne Sam 18 Sep 2010 - 23:26 | |
| super ton programme y va me servir, merci | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Dim 19 Sep 2010 - 0:35 | |
| Désolé, mais je ne comprends vraiment pas ! Qu'est-ce qu'une date julienne ? Si c'est une date du calendrier Julien, ça n'y ressemble pas (exemple : aujourd'hui donne : 2455458.926 Drôle de date ! Et si je passe ce chiffre (ou un autre) par la deuxième formule : le Jour du Mois donne toujours zéro le Mois ne colle jamais, que ce soit sur E-1 ou E-13 Il n'y a guère que l'année qui fonctionne bien. N'y a-t-il pas des erreurs dans les formules ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Date <-> Date julienne Dim 19 Sep 2010 - 10:39 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Date <-> Date julienne Dim 19 Sep 2010 - 14:25 | |
| Rapidement,je dois partir... - la date julienne dont il est question plus haut n'a rien à voir avec le calendrier Julien. (C'est une façon d'exprimer une date en nombre de jours qui partent du 1er janvier -4712 à 12h GMT) L'avantage du calcul est de ne pas se préoccuper des longueurs des mois ni des années bissextiles. La méthode a toutefois des limites pour les années inférieures à 1582, en particulier les années inférieures à 400 (pour de sombres questions d'années bissextiles je crois). - Après un rapide coup d'oeil, il faut prendre les valeurs entières dans la plupart des calculs, un exemple vite fait: - Code:
-
LABEL D2JD, JD2D DIM A, B, C, D, E, F, JD, W, X, Z, Jour, Mois, Annee
' Exemple: 14 juillet 1789 Jour = 14: Mois = 7: Annee = 1789
print Jour, "/", Mois, "/", Annee print GOSUB D2JD PRINT "JD = " + STR$(JD) print GOSUB JD2D print Jour, "/", Mois, "/", Annee END
D2JD: ' Jour, Mois, Annee -> JD IF Mois < 3 THEN Mois = Mois + 12: Annee = Annee - 1 A = INT(Annee/100) B = INT(A/4) C = 2-A+B E = INT(365.25*(Annee+4716)) F = INT(30.6001*(Mois+1)) JD = C+Jour+E+F-1524.5 RETURN
JD2D: ' JD -> Jour, Mois, Annee Z = JD+0.5 W = INT((Z - 1867216.25)/36524.25) X = INT(W/4) A = Z+1+W-X B = A+1524 C = INT((B-122.1)/365.25) D = INT(365.25 * C) E = INT((B-D)/30.6001) F = INT(30.6001*E) Jour = B-D-F Mois = E-1: IF Mois > 12 THEN Mois = Mois - 12 Annee = C-4716: IF Mois < 3 THEN Annee = Annee + 1 RETURN J'ai édité le 1er post et l'exemple ci-dessus (les routines sont devenues identiques), qui étaient incomplets. @Klaus dont acte pour tes routines sur les dates, mais ici c'est fait de façon très simple, avec un simple calcul, sans boucles sur les années avec tous les tests afférents, années bissextiles etc. Mais il est vrai que pour une utilisation pratique, il faudra rajouter les tests de validité des données fournies. PS pour jjn4 (et les autres): la "date julienne" est donc un nombre de jours, qui se termine toujours par .5, en effet, l'origine étant fixée le 1/1/-4712 à 12h GMT (jour 0) la date rendue est à 0h GMT, donc 1/2 jour plus tard (d'où le .5). Enfin, pitié, ne pinaillez pas trop (jjn4 ) sur mes explications un peu fumeuses, je suis loin d'être un spécialiste en la matière, et pour ceux que ça intéresse vraiment... -> google, l'essentiel est que le calcul fonctionne. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Date <-> Date julienne Dim 19 Sep 2010 - 19:56 | |
| Jour de la semaine: A première vue, on doit pouvoir, à partir de la date julienne (JD), connaître le jour de la semaine correspondant, sachant que jusqu'à preuve du contraire les semaines ont toujours été de 7 jours. Donc il suffit de connaître le reste de la division de la date julienne par 7 pour trouver le jour. Ainsi: - Code:
-
joursemaine = INT(7*FRAC(JD/7)) ce qui donnera, expérience faite: 0 = mardi, 1 = mercredi, 2 = jeudi, 3 = vendredi, 4 = samedi, 5 = dimanche, 6 = lundi | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Lun 20 Sep 2010 - 18:47 | |
| Ah oui, là ça marche ! Et ça donne des perspectives intéressantes... ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Date <-> Date julienne Lun 20 Sep 2010 - 21:16 | |
| Il me semble oui, l'avantage c'est que c'est un calcul très simple et très rapide (même si les termes sont un peu tordus, mais bon, l'ordinateur n'est pas regardant), ça évite les longues boucles sur les années comme je faisais avant, avec tests à chaque fois des années bissextiles, etc. C'est facile de faire un calendrier, et toutes les opérations sur les dates, entre autres.
Le terme de 'date julienne' n'est sans doute pas très approprié (prête à confusion), je n'en ai pas d'autre mais le lecteur en fera ce qu'il voudra ! Ça ne vient pas de Jules César, comme pour le calendrier Julien, mais d'un certain Julius Scaliger, père de Josephus Justus Scaliger, qui a inventé l'idée de compter les jours en continu depuis... -4712. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Date <-> Date julienne Lun 20 Sep 2010 - 21:29 | |
| Un tordu ce Julius Scaliger | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Date <-> Date julienne Lun 20 Sep 2010 - 21:47 | |
| Tu a raison, je l'ai bien connu, dans le temps... Pourquoi -4712 ? il y a des raisons, mais je ne veux pas vous encombrer l'esprit avec ça !!! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Date <-> Date julienne Lun 20 Sep 2010 - 23:04 | |
| Un exemple d'utilisation des routines ci-dessus: un petit calendrier vite fait (exécution rapide) ! (l'année et le fichier résultat et la largeur des colonnes sont à changer à volonté) - Code:
-
DIM A, B, C, D, E, F, JD, W, X, Z, Jour, Mois, Annee, Fichcal$ DIM sa, sj, j1, j2, jr, i, j, lc, a$, b$, mp, js$(7), ms$(12), li$(32) LABEL D2JD, JD2D, Calendrier js$(0) = "Mardi": js$(1) = "Mercredi": js$(2) = "Jeudi": js$(3) = "Vendredi" js$(4) = "Samedi": js$(5) = "Dimanche": js$(6) = "Lundi" ms$(1) = "Janvier": ms$(2) = "Février": ms$(3) = "Mars": ms$(4) = "Avril" ms$(5) = "Mai": ms$(6) = "Juin": ms$(7) = "Juillet": ms$(8) = "Août" ms$(9) = "Septembre": ms$(10) = "Octobre": ms$(11) = "Novembre": ms$(12) = "Décembre"
Fichcal$ = "Z:\Calendrier_2010.txt": ' ********** à modifier *************
lc = 10: ' largeur de colonnes du calendrier Annee = 2010: GOSUB Calendrier PRINT "Terminé !" END
D2JD: ' Jour, Mois, Annee -> JD IF Mois < 3 THEN Mois = Mois + 12: Annee = Annee - 1 A = INT(Annee/100) B = INT(A/4) C = 2-A+B E = INT(365.25*(Annee+4716)) F = INT(30.6001*(Mois+1)) JD = C+Jour+E+F-1524.5 RETURN
JD2D: ' JD -> Jour, Mois, Annee Z = JD+0.5 W = INT((Z - 1867216.25)/36524.25) X = INT(W/4) A = Z+1+W-X B = A+1524 C = INT((B-122.1)/365.25) D = INT(365.25 * C) E = INT((B-D)/30.6001) F = INT(30.6001*E) Jour = B-D-F Mois = E-1: IF Mois > 12 THEN Mois = Mois - 12 Annee = C-4716: IF Mois < 3 THEN Annee = Annee + 1 RETURN
Calendrier: sa = Annee: Mois = 1: Jour = 1: GOSUB D2JD: j1 = JD Annee = sa: Mois = 12: Jour = 31: GOSUB D2JD: j2 = JD mp = 0: sj = 31 FOR JD = j1 TO j2 GOSUB JD2D: jr = INT(7*FRAC(JD/7)) IF Mois <> mp IF sj < 31 AND Mois > 1 FOR i = sj+1 TO 31: li$(i) = li$(i) + STRING$(lc, " "): NEXT i END_IF b$ = UPPER$(ms$(Mois)): IF lc < 10 THEN b$ = LEFT$(b$, lc-1) a$ = b$+ STRING$(lc-LEN(b$), " ") li$(0) = li$(0) + a$ mp = Mois END_IF a$ = LEFT$(js$(jr), 2) + " " + STR$(Jour) a$ = a$ + STRING$(lc-LEN(a$), " ") li$(Jour) = li$(Jour) + a$ sj = Jour NEXT JD FILE_OPEN_WRITE 1, Fichcal$ a$ = STRING$(lc*6-8, "-") + " CALENDRIER " + STR$(sa) FILE_WRITELN 1, a$ + STRING$(lc*12 - LEN(a$), "-") FOR i = 0 TO 31: FILE_WRITELN 1, li$(i): NEXT i FILE_WRITELN 1, STRING$(lc*12, "-") FILE_CLOSE 1 RETURN | |
| | | Contenu sponsorisé
| Sujet: Re: Date <-> Date julienne | |
| |
| | | | Date <-> Date julienne | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |