[Resolu] Comment créer un DateGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Resolu] Comment créer un DateGadget

Message par Micoute »

Bonjour à tous,

pour un programme, j'ai besoin d'un DateGadget() qui accepterait les Quad, car je souhaiterais calculer des dates allant de 1601 à 9999, si c'est possible.

Le problème majeur, c'est que je ne sais pas comment fonctionne ce gadget et d'après ce que j'ai compris, il n'accepte que des valeurs allant du 01/01/1970 00:00:00 au 19/01/2038 03:14:07.

Je ne vous cache que j'aimerais trouver quelqu'un qui pourrait m'expliquer comment créer ce gadget et je l'en remercie beaucoup à l'avance, car ça me rendrait heureux d'être aussi chanceux.
Dernière modification par Micoute le dim. 12/nov./2017 14:17, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Comment créer un DateGadget

Message par Zorro »

Ce que tu veux faire, s'appel un calendrier Perpétuel !

cherches sur le Forum avec cette expression "calendrier Perpétuel" (voir aussi le forum Anglais )
tu devrai trouver ton bonheur ....

sinon au pire, il reste Google, qui va t'apporter surement quelques Algos .. :)
je l'en remercie beaucoup à l'avance, car ça me rendrait heureux d'être aussi chanceux
c'est quelques peut exagéré non ?
ça sent la vaseline ta phrase, en general moi ça me fait plutôt fuir ... :roll:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Comment créer un DateGadget

Message par kernadec »

Bjr Micoute
Regarde le post de mesa qui a traduit en pb une dll asm d un calendrier perpetuel
http://www.purebasic.fr/french/viewtopi ... hilit=date
Je pense que cela devrait te convenir

Cordialement
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment créer un DateGadget

Message par Micoute »

@ Dobro Non, je ne souhaite pas faire un calendrier perpétuel, mais simplement un calcul entre deux dates qui indiquerait le jour de la semaine, le jour du mois, le nom du mois et l'année des 2 termes de l'opération.
Mes remerciements par anticipation ne sont pas exagérés, mais sincères, c'est pour montrer à quel point je suis désespéré.

@ Kernadec, quand je suis embrouiller dans mes équations, j'ai du mal à réfléchir simplement, mais comme on "dit faire et défaire, c'est travailler", et refaire, moi je dis que c'est usant.
Je possède déjà ce programme et je vais voir ce que je peux faire avec

Merci à tous les deux.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Mesa
Messages : 1098
Inscription : mer. 14/sept./2011 16:59

Re: [Resolu] Comment créer un DateGadget

Message par Mesa »

J'ai aussi fait ça:

Code : Tout sélectionner

;....................................................................................
; .: CALCUL SUR LES DATES :.
;============================
; Jour Julien astronomique 
;============================
; Auteur Mesa
; PureBasic v4.61 à v5.61
;
; D'après "Astronomie pratique et informatique" 
; de C. DUMOULIN et JP PARISOT, Ed MASSON (niveau scientifique : Master)
;
; Le jour julien est universellement utilisé par les astronomes et les historiens.
; Sa précision est de l'ordre de la minute de temps entre les années -5000 et +8000 au moins
;
; Le calcul du jour julien (JJ ou JD en anglais pour Jour Julien) 
; est indispensable pour effectuer des calculs astronomiques
; mais aussi pour faire des calculs sur des dates du calendrier.
;
; Opérations sur les dates : addition, soustraction, etc...
;
; Par ex : Le 6 juin 1944 à 6h 10' 24" + 3 mois 4 jour 1h 47' 12" =  ?
;......................................................................................

;OS : Tous

;Institut de mecanique celeste et de calcul des ephemerides
;http://www.imcce.fr/fr/grandpublic/temps/jour_julien.php

;
Procedure.d jd(Annee, Mois, jour, Heure, Minute, Seconde); Jour Julien à 0h TU (Temps Universel )
  
  Protected y.d=0
  Protected m.d=0
  Protected a.d=0
  Protected jj.d=0
  Protected z.d=0
  
  
  If Mois<3
    y=Annee-1
    m=Mois+12
  Else
    y=Annee
    m=Mois
  EndIf
  
  jj=Int(365.25*(y+4716))+Int(30.6001*(m+1))+jour-1524.5 
  
  ;  Réforme Grégorienne 
  ; Au Jeudi 4 Octobre 1582 succède le Vendredi 15 Octobre 1582
  ;
  a=Annee+(Mois/100)+(jour/10000)
  If a>1582.1014; 
    a = Int(y/100)
    jj = jj + 2 - a + Int(a/4)
  EndIf
  
  ;Ajout h m s
  jj + (Heure + Minute/60 + Seconde/3600)/24
  
  ProcedureReturn jj
EndProcedure

Procedure.d jd2(Annee, Mois, jour, Heure, Minute, Seconde); Jour Julien à 0h TU (Temps Universel )
  ; --Ne fonctionne pas avant le 15 Octobre 15 1582 mais plus rapide que jd()--
  Protected j.d
  Protected m
  Protected a
  Protected jj.d
  
  a=Annee
  m=Mois
  j=jour+(Heure + Minute/60 + Seconde/3600)/24
  
  jj=367*a -Int(1.75*(Int((m+9)/12)+a))
  jj-Int(0.75*(1+Int((Int((m-9)/7)+a)*0.01)))
  jj+Int((275*m)/9)+j+1721028.5
  
  ProcedureReturn jj
EndProcedure

Procedure.s jd2Date(jj.d) ; Jour Julien -> Date
  
  Protected j1.d,f.d,dm.d,h.d
  Protected z,aa,al,b,c,d,e,an
  Protected Resultat.s
  
  j1=jj+0.5
  z=Int(j1)
  f=j1-z
  If z<2299161
    aa=z
  Else
    al=Int((z-1867216.25)/36524.25)
    aa=z+1+al-Int(al/4)
  EndIf
  b=aa+1524
  c=Int((b-122.1)/365.25)
  d=Int(365.25*c)
  e=Int((b-d)/30.6001)
  dm=b-d-Int(30.6001*e)+f
  If e<14
    m=e-1
  Else
    m=e-13
  EndIf
  If m>2
    an=c-4716
  Else
    an=c-4715
  EndIf
  h=24*(dm-Int(dm))
  Resultat=Str(an)+"/"+Str(m)+"/"+Str(Int(dm))+" "+StrD(h); Année Mois Jour Heure (fraction)
  ProcedureReturn Resultat
EndProcedure

Procedure.b DayOfWeekJD(jj.d)
  ;Renvoie 0=Dimanche, 1 Lundi, 2=Mardi, 3=Mercredi, 4=Jeudi, 5=Vendredi, 6=Samedi
  Protected j.d
  Protected Resultat.b
  j=jj+1.5
  Resultat=Int(j-7*Int(j/7));j%7
  ProcedureReturn Resultat
EndProcedure

Procedure DayOfYearJD(Annee, Mois, jour) ;Renvoie le rang du jour dans l'année
  Protected Resultat
  Resultat = 1+ jd(Annee, Mois, jour, 0, 0, 0) - jd(Annee, 1, 1, 0, 0, 0)
  ProcedureReturn Resultat
  
EndProcedure

Procedure.b IsLeapYear(Annee) ; Renvoie : 0 = pas bissextile, 1 = est bissextile
  ;Bissextile 
  Protected Resultat.b
  
  If Annee < 1582 ; Trop compliqué, croyez moi !
    ProcedureReturn 0; -1
  EndIf
  
  If Annee%4=0 
    If y%100<>0
      Resultat=1
    ElseIf Annee%400=0
      Resultat=1
    EndIf
    Resultat=1
  EndIf
  ProcedureReturn Resultat
EndProcedure



Debug ("_____________.: Jour Juliens :.______________")
Debug "date Grégorienne : 1,1,-4712 :-> Jour Julien = " + StrD(jd(-4712,1,1,0,0,0),2)
Debug " Réforme Grégorienne "
Debug " Au Jeudi 4 Octobre 1582 succède le Vendredi 15 Octobre 1582"
Debug "date Grégorienne : 4,10,1582 :-> Jour Julien = " + StrD(jd(1582,10,4,0,0,0),2)
Debug "date Grégorienne : 15,10,1582 :-> Jour Julien = " + StrD(jd(1582,10,15,0,0,0),2)
Debug " Réforme Grégorienne OK"
Debug "date Grégorienne : 14,7,1789 :-> Jour Julien = " + StrD(jd(1789,7,14,0,0,0),2)
Debug "date Grégorienne : 1,1,1900 :-> Jour Julien = " + StrD(jd(1900,1,1,0,0,0),2)
Debug "date Grégorienne : 1,1,2000 :-> Jour Julien = " + StrD(jd(2000,1,1,0,0,0),2)
Debug "Jugement dernier ;) : 21,12,2012,12,12,12 :-> Jour Julien = " + StrD(jd(2012,12,21,12,12,12),6)
Debug "date Grégorienne : 1,1,3000 :-> Jour Julien = Ouf ! ;)) " + StrD(jd(3000,1,1,0,0,0),2)
Debug ""

Debug("___________Quick JD_____________")
Debug "Calcul rapide mais pas de Réforme Grégorienne"
Debug "date Grégorienne : 15,10,1582 :-> Jour Julien = " + StrD(jd2(1582,10,15,0,0,0),2)
Debug "date Grégorienne : 14,7,1789 :-> Jour Julien = " + StrD(jd2(1789,7,14,0,0,0),2)
Debug "date Grégorienne : 1,1,1900 :-> Jour Julien = " + StrD(jd2(1900,1,1,0,0,0),2)
Debug "date Grégorienne : 1,1,2000 :-> Jour Julien = " + StrD(jd2(2000,1,1,0,0,0),2)
Debug "Jugement dernier ;) : 21,12,2012,12,12,12 :-> Jour Julien = " + StrD(jd2(2012,12,21,12,12,12),6)
Debug ""

Debug("___________JD -> Grego_(Y, M, D, h)____________")
Debug "Jour Julien = 0.00 :-> date Grégorienne : " + jd2Date(0.00)  
;  Réforme Grégorienne
Debug "  Au Jeudi 4 Octobre 1582 succède le Vendredi 15 Octobre 1582"
Debug "Jour Julien = 2299159.50 :-> date Grégorienne : " + jd2Date(2299159.50)
Debug "Jour Julien = 2299160.50 :-> date Grégorienne : " + jd2Date(2299160.50)
Debug "  Réforme Grégorienne OK"
Debug "Jour Julien = 2374673.50 :-> date Grégorienne : " + jd2Date(2374673.50)
Debug "Jour Julien = 2415020.50 :-> date Grégorienne : " + jd2Date(2415020.50)
Debug "Jour Julien = 2451544.50 :-> date Grégorienne : " +jd2Date(2451544.50)
Debug "Jour Julien =2456283.008472 :-> date Grégorienne : " + jd2Date(2456283.008472)
Debug "Jour Julien = 2816787.50 :-> date Grégorienne : " + jd2Date(2816787.50)
Debug ""

; Debug("___________jour de la semaine____________")
; Debug "0=Dimanche, 1 Lundi, 2=Mardi, 3=Mercredi, 4=Jeudi, 5=Vendredi, 6=Samedi"
; Debug "  Au Jeudi 4 Octobre 1582 succède le Vendredi 15 Octobre 1582"
; Debug "jour de la semaine du 4,10,1582 is " + Str(DayOfWeekJD(jd(1582,10,4,0,0,0)))
; Debug "jour de la semaine du 15,10,1582 is " + Str(DayOfWeekJD(jd(1582,10,15,0,0,0)))
; Debug "jour de la semaine du 1,1,2000 is " + Str(DayOfWeekJD(jd(1582,10,15,0,0,0)))
; Debug ""

Debug("___________jour de la semaine____________")
Debug "0=Dimanche, 1 Lundi, 2=Mardi, 3=Mercredi, 4=Jeudi, 5=Vendredi, 6=Samedi"
Debug "  Au Jeudi 4 Octobre 1582 succède le Vendredi 15 Octobre 1582"
 jour.s ="Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi"
Debug "jour de la semaine du 4,10,1582 est " + StringField(jour.s,DayOfWeekJD(jd(1582,10,4,0,0,0))+1 ,",")
Debug "jour de la semaine du 15,10,1582 est " + StringField(jour.s,DayOfWeekJD(jd(1582,10,15,0,0,0))+1 ,",")
Debug "jour de la semaine du 1,1,2000 est " + StringField(jour.s,DayOfWeekJD(jd(2000,1,1,0,0,0))+1 ,",")
Debug "jour de la semaine du 11,04,2012 est " + StringField(jour.s,DayOfWeekJD(jd(2012,04,11,0,0,0))+1 ,",")
Debug ""

Debug("___________Aujourd'hui____________")
Tojour$=FormatDate("%yyyy/%mm/%dd %hh:%ii:%ss", Date())
jdTojour.d=jd(Year(Date()),Month(Date()),Day(Date()),Hour(Date()),Minute(Date()),Second(Date()))

dow=DayOfWeekJD(jdTojour)
dow$=""
;0=Dimanche, 1 Lundi, 2=Mardi, 3=Mercredi, 4=Jeudi, 5=Vendredi, 6=Samedi
Select dow
  Case 0 : dow$="Dimanche "
  Case 1 : dow$="Lundi "
  Case 2 : dow$="Mardi "
  Case 3 : dow$="Mercredi "
  Case 4 : dow$="Jeudi "
  Case 5 : dow$="Vendredi "
  Case 6 : dow$="Samedi "
EndSelect  
Debug "Aujourd'hui :" + dow$ + Tojour$
Debug "Jour Julien " + StrD(jdTojour)
Debug "jour n° " + Str(DayOfYearJD(Year(Date()), Month(Date()), Day(Date()))) + " de l'année"
isleap$ =" est une année bissextile"
isnotleapAnnee$ = " n'est pas une année bissextile"
If IsLeapYear(Year(Date())) = 1
  Debug Str(Year(Date())) + isleap$
Else
  Debug Str(Year(Date())) + isnotleapAnnee$
EndIf


MessageRequester("Maintenant","Faisons quelques calculs sur les dates.",0)


; ClearDebugOutput()
Debug "Faisons quelques calculs sur les dates."
Debug "Quelle est la date au : 373 jours après le 1/1/2000 0h ?"
Newjd.d=jd(2000,1,1,0,0,0) + 373
Debug jd2Date(Newjd)
Debug ""

Debug "Quelle est la date au : 119 jours avant le 1/1/2000 0h ?"
Debug jd2Date(jd(2000,1,1,0,0,0) - 119)
Debug ""

Debug "Quelle est la date au : 3 semaines après le  1/1/2000 0h ?"
Debug jd2Date(jd(2000,1,1,0,0,0) + 7*3)
Debug ""

Debug "Quelle est le nombre de jours entre le 1/1/2000 12h 14m 37s et le 1/1/3000 6h 56m 12s ?"
jd1.d=jd(2000,1,1,12,14,37)
jd2.d=jd(3000,1,1,6,56,12)
Debug jd2-jd1
Debug ""

Debug "Bébé naîtra 9 mois après aujourd'hui :"
Debug jd2Date(jdTojour + 9*30.5)
M.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Resolu] Comment créer un DateGadget

Message par Micoute »

Mais c'est génial ce programme, merci pour le partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre