Fonctions sur les dates

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Fonctions sur les dates

Message par Chris »

Je me suis fait quelques procédures sur les dates, j'en avais besoin pour un prog.

Je vous file le code, vous en faites ce que vous voulez.

Code : Tout sélectionner

;{/ Déclarations
Declare.s Is_Holliday(date_)                          ; Calcul des jours fériés
Declare Get_Easter_Date(date_)                        ; Calcul de la date de Pâques
Declare Get_Year_Short(date_)                         ; Retourne l'année sur deux chiffres
Declare Get_Year_Long(date_)                          ; Retourne l'année sur quatre chiffres
Declare.s Get_Month_Txt(date_)                        ; Retourne le nom du mois (Janvier à Décembre)
Declare Get_Month_Num(date_)                          ; Retourne le mois au format numérique (1 à 12)
Declare Get_DayOfYear(date_)                          ; Retourne le numéro du jour dans l'année
Declare.s Get_Day_Txt(date_)                          ; Retourne le nom du jour (Dimanche à Samedi)
Declare Get_Day_Num(date_)                            ; Retourne le jour au format numérique (1 à 31)
Declare.s Get_Date_Txt(date_, Sep$, Mode.l)           ; Retourne la date au format texte
;}

;{/ Constantes
#Date_ShortYear = 1  ; Année sur deux chiffres
#Date_LongYear  = 2  ; Année sur quatre chiffres
#Date_DayText   = 4  ; Jour au format texte - Separateur [ ] - Année sur 4 chiffres
#Date_MonthText = 8  ; Mois au format texte - Separateur [ ] - Année sur 4 chiffres
#Date_FullText  = 16 ; Jour et Mois au format texte - Séparateur [ ] - Année sur 4 chiffres
;}

;{/ Dates
Procedure.s Get_Date_Txt(date_, Sep$, Mode.l)             ; Renvoie la date au format texte
  D$ = "" : M$ = ""
  Select Mode
    Case #Date_ShortYear  : D$ = "%dd" : M$ = "%mm" : Y$ = "%yy"
      ProcedureReturn FormatDate(D$+Sep$+M$+Sep$+Y$, date_)
      
    Case #Date_LongYear  : D$ = "%dd" : M$ = "%mm" : Y$ = "%yyyy"
      ProcedureReturn FormatDate(D$+Sep$+M$+Sep$+Y$, date_)
      
    Case #Date_DayText   : ND$ = Get_Day_Txt(date_) : D$ = "%dd" : M$ = "%mm" : Y$ = "%yyyy"
      ProcedureReturn ND$ + " " + FormatDate(D$+Sep$+M$+Sep$+Y$, date_)
      
    Case #Date_MonthText  : D$ = "%dd" : M$ = Get_Month_Txt(date_) : Y$ = "%yyyy" : Sep$ = " "
      ProcedureReturn FormatDate(D$+Sep$+M$+Sep$+Y$, date_)
      
    Case #Date_FullText : ND$ = Get_Day_Txt(date_) : D$ = "%dd" : M$ = Get_Month_Txt(date_) : Y$ = "%yyyy" : Sep$ = " "
      ProcedureReturn ND$ + " " + FormatDate(D$+Sep$+M$+Sep$+Y$, date_)
      
  EndSelect
EndProcedure
;}

;{/ Jours
Procedure   Get_Day_Num(date_)                            ; Retourne le jour au format numérique (1 à 31)
  ProcedureReturn Day(date_)
EndProcedure
Procedure.s Get_Day_Txt(date_)                            ; Retourne le nom du jour (Dimanche à Samedi)
  Restore jour
  For i = 0 To DayOfWeek(date_)
    Read.s D$
  Next
  ProcedureReturn D$
EndProcedure
Procedure   Get_DayOfYear(date_)                          ; Retourne le numéro du jour dans l'année
  ProcedureReturn DayOfYear(date_)
EndProcedure
;}

;{/ Mois
Procedure   Get_Month_Num(date_)                          ; Retourne le mois au format numérique (1 à 12)
  ProcedureReturn Month(date_)
EndProcedure
Procedure.s Get_Month_Txt(date_)                          ; Retourne le nom du mois (Janvier à Décembre)
  Restore Mois
  For i = 1 To Month(date_)
    Read.s D$
  Next
  ProcedureReturn D$
EndProcedure
;}

;{/ Année
Procedure   Get_Year_Long(date_)                          ; Retourne l'année sur quatre chiffres
  ProcedureReturn Year(date_)
EndProcedure
Procedure   Get_Year_Short(date_)                         ; Retourne l'année sur deux chiffres
  ProcedureReturn Val(FormatDate("%yy", date_))
EndProcedure
;}

;{/ Pâques
Procedure   Get_Easter_Date(date_)                        ; Calcul de la date de Pâques
  Y = Year(date_)
  
  a = Y % 19 : b = Y/100 : c = Y % 100
  P = b / 4 : e = b % 4 : F = (b + 8) / 25
  g = (b - F + 1) / 3 : h = (19 * a + b - P - g + 15) % 30
  i = c / 4 : k = c % 4 : r = (32 + 2 * e + 2 * i - h - k) % 7
  N = (a + 11 * h + 22 * r) / 451  
  
  M = (h + r - 7 * N + 114) / 31
  D = ((h + r - 7 * N + 114) % 31) + 1
  
  ProcedureReturn Date(Y, M, D, 0, 0, 0)
EndProcedure

;}

;{/ Calcul des jours fériés
Procedure.s Is_Holliday(date_)                            ; Calcul des jours fériés
  D = Day(date_)
  M = Month(date_)
  P = Get_Easter_Date(date_)
  
  If date_ = P
    ProcedureReturn "Dimanche de Paques"
  ElseIf date_ = AddDate(P, #PB_Date_Day, 1)
    ProcedureReturn "Lundi de  Paques"
  ElseIf date_ = AddDate(P, #PB_Date_Day, 39)
    ProcedureReturn "Ascension"
  ElseIf date_ = AddDate(P, #PB_Date_Day, 49)
    ProcedureReturn "Pentecôte"
  ElseIf date_ = AddDate(P, #PB_Date_Day, 50)
    ProcedureReturn "Lundi de Pentecôte"
    
  ElseIf M = 1 And D = 1
    ProcedureReturn "Jour de l'An"
  ElseIf M = 5 And D = 1
    ProcedureReturn "Fête du Travail"
  ElseIf M = 5 And D = 8
    ProcedureReturn "Armistice 39-45"
  ElseIf M = 7 And D = 14
    ProcedureReturn "Fête Nationale"
  ElseIf M = 8 And D = 15
    ProcedureReturn "Assomption"
  ElseIf M = 11 And D = 1
    ProcedureReturn "Armistice 14-18"
  ElseIf M = 11 And D = 11
    ProcedureReturn "Toussaint"
  ElseIf M = 12 And D = 25
    ProcedureReturn "Noël"
  ElseIf M = 12 And D = 31
    ProcedureReturn "Saint Sylvestre"
  Else
    ProcedureReturn ""
  EndIf
EndProcedure
;}

;{- TESTS
D = Date(2011, 06, 12,0,0,0)

Debug Get_Day_Num(D)
Debug Get_Day_Txt(D)
Debug Get_DayOfYear(D)
Debug ""
Debug Get_Month_Num(D)
Debug Get_Month_Txt(D)
Debug ""
Debug Get_Year_Long(D)
Debug Get_Year_Short(D)
Debug ""

P = Get_Easter_Date(D)
Debug "Date de paques: le " + Get_Day_Txt(P)+" "+Str(Get_Day_Num(P))+" "+Get_Month_Txt(P)+" "+Str(Get_Year_Long(P))
Debug ""
 
Debug Is_Holliday(D)

Debug Get_Date_Txt(D, "/", #Date_ShortYear)
Debug Get_Date_Txt(D, "/", #Date_LongYear)
Debug Get_Date_Txt(D, "/", #Date_DayText)
Debug Get_Date_Txt(D, "/", #Date_MonthText)
Debug Get_Date_Txt(D, "/", #Date_FullText)

Debug ""
Debug "Pâques"
Debug Get_Date_Txt(P, "/", #Date_ShortYear)
Debug Get_Date_Txt(P, "/", #Date_LongYear)
Debug Get_Date_Txt(P, "/", #Date_DayText)
Debug Get_Date_Txt(P, "/", #Date_MonthText)
Debug Get_Date_Txt(P, "/", #Date_FullText)





;{/Datas
DataSection
  Jour:
  Data.s "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi","Vendredi","Samedi"
  
  Mois:
  Data.s "Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"
EndDataSection
;}
PS: Je viens de trouver un bug dans la proc qui met les dates en forme.
Une ligne était identique à la suivante et donc, les résultats étaient identiques. Saloperie de copier/coller

En fait, personne n'a testé le code. Bande de guignols :mrgreen:
Dernière modification par Chris le mar. 10/mai/2011 21:57, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fonctions sur les dates

Message par Ar-S »

ça pourra surement servir un de ces jours, merci Chris.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Fonctions sur les dates

Message par Kwai chang caine »

+1
Merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Mindphazer
Messages : 693
Inscription : mer. 24/août/2005 10:42

Re: Fonctions sur les dates

Message par Mindphazer »

Joli panel de fonctions

Merci ! :)
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Fonctions sur les dates

Message par pat »

Merci Chris pour ce programme.
La routine du calcul de Pâques, tu l'as pris certainement sur Internet car c'est un calcul de mathématicien (avec plein de modulo, exprimé par ton programme par %).
Le programme de dates que tu donnes ne fonctionne que pour les périodes que PB a mis en place sur les dates, je veux dire par là, par exemple, que tu ne pourras pas dépasser l'année 2038 et aller en dessous de 1970.
Par exemple, si je veux utiliser le calendrier et calculer une date qui va du 01/01/1800 au 31/12/2200 inclus par exemple, cela ne fonctionne pas.
C'est pourquoi il vaut mieux ne pas trop tenir compte des fonctions dates de PB et les faire soi-même par programme, c'est beaucoup plus long mais largement faisable.
beruska
Messages : 21
Inscription : sam. 28/mai/2011 12:32

Re: Fonctions sur les dates

Message par beruska »

Il y a longtemps que j'utilise la fonction du jour julien pour gérer les dates, et à partir de la procédure DateComplete on peut faire tout ce qu'on veut pour n'importe quelle époque.

Code : Tout sélectionner

; Calcul du Jour Julien et du jour de la semaine correspondant, à partir d'une date donnée.
; les dates doivent toujours figurer en format JJ MM AAAA avec espaces ou séparateurs.
; en PB_51 by beruska

Procedure.s datecomplete(date$)
  
  jour$ = "Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi"
  mois$ = "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre"
  
  j = Val(Left(date$,2))
  m = Val(Mid(date$,4,2)): mm = m                 ; on conserve le valeurs d'origine (mm et yy)
  y = Val(Right(date$,4)): yy = y
    
    A0.f = y + m/100 + j/10000                    ; préparation de la date 15/10/1582
    A0 = Int(A0*10000+0.5)/10000                  ; sous la forme 1582.1015
  
  If m < 3                                        ; on commence toujours les calculs le 1er mars
      m+12                                        ; donc janvier et février sont les mois 13 et 14
      y-1                                         ; de l'année précedente
    EndIf

  If A0 > 1582.1004 And A0 < 1582.1015            ; le lendemain du 04/10/1582 est le 15/10/1582
  MessageRequester("Error", "Date inexistante")   ; donc éliminons les dates inexistantes (du 5 au 14)
  Goto iniz                                       ; on recommence
  EndIf
  
  ; -------------------------
  ; algorithme du jour julien
  ; -------------------------
  a = Int(y/100)
  If A0 < 1582.1015 
  b = 0                                           ; pour les dates du calendrier julien
  Else
  b = 2-a+Int(a/4)                               ; pour les dates du calendrier grégorien
  EndIf
  c = Int(365.25 * y)
  d = Int(30.6001 * (m+1))
  
  jj.f = b + c + d + j + 1720994.5                ; jj est le jour julien de la date choisie
  
  Debug "Jour Julien = " + StrF(jj,2)   ; [activer cette ligne pour voir le numéro du jour julien]
  
  ; calcul du jour de la semaine
  e = jj + 1.5                                    
  jour = (e % 7) + 1
  g$ = StringField(jour$,jour,",")
  date$ = g$ + " " + Str(j) + " " + StringField (mois$, mm, ",") + " " + Str(yy)
  
  ProcedureReturn 

EndProcedure

; -------
; EXEMPLE
; -------

Global jj.f

iniz:
choix$ = InputRequester("Jour de la semaine", "Insérer date (JJ/MM/AAAA)","")
Debug datecomplete(choix$)
; ----------------
; 
; la bataille de Marignan a eu lieu les 13 et 14 septembre 1515 (Wikipedia dit un jeudi e un vendredi)
; vérifier avec le prg
Ciao!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Fonctions sur les dates

Message par Chris »

pat a écrit :Merci Chris pour ce programme.
La routine du calcul de Pâques, tu l'as pris certainement sur Internet car c'est un calcul de mathématicien (avec plein de modulo, exprimé par ton programme par %).
Le programme de dates que tu donnes ne fonctionne que pour les périodes que PB a mis en place sur les dates, je veux dire par là, par exemple, que tu ne pourras pas dépasser l'année 2038 et aller en dessous de 1970.
Par exemple, si je veux utiliser le calendrier et calculer une date qui va du 01/01/1800 au 31/12/2200 inclus par exemple, cela ne fonctionne pas.
C'est pourquoi il vaut mieux ne pas trop tenir compte des fonctions dates de PB et les faire soi-même par programme, c'est beaucoup plus long mais largement faisable.
Oui, j'ai trouvé ça sur le net.
Pour les périodes, ça ne me gène pas.

Avant 1970, c'est trop vieux, et après 2038, ... c'est trop loin :mrgreen:
Avatar de l’utilisateur
Mindphazer
Messages : 693
Inscription : mer. 24/août/2005 10:42

Re: Fonctions sur les dates

Message par Mindphazer »

Chris a écrit : Avant 1970, c'est trop vieux, et après 2038, ... c'est trop loin :mrgreen:
Grrrmf... Chuis né en 1969...
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Fonctions sur les dates

Message par graph100 »

mon pauvre vieux ;')
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fonctions sur les dates

Message par kernadec »

bonjour à tous
je me fais vieux peut être... aussi

je voulais utiliser la librairie calendar.dll de "Mikołaj Hajduk"
qui se trouve à cette adresse : http://mikhajduk.houa.org/EN/Links.php
c'est une librairie qui effectue les conversions et calculs de dates sur 11 millions d'années
elle est en écrite en FASM.

mais voilà, je suis bloqué sur un détail pour utiliser cette librairie DLL avec ce code..
"CODE ERREUR " nombre de paramètres incorrect." ??

si quelqu'un à quelques instant à m'accorder pour ce problème.
je l'en remercie d'avance.

je joint le code format data pour obtenir la librairie : "calendar.dll"

Cordialement

Code : Tout sélectionner

path$ = "c:\purebasic"
Global YMD_DLL, Gregorian.l, LeapYearFlag.l, Y.l, M.l, D.l, Yg.l, Mg.l, Dg.l, Yj.l, Mj.l, Dj.l, n.l

Prototype.l YMD_DayOfWeek(Y, M, D, Gregorian)
Prototype.l YMD_IsLeapYear(Y, Gregorian)
Prototype.l YMD_MDToDayNum(M, D, LeapYearFlag)
Prototype.l YMD_DayNumToMD(n, LeapYearFlag, *M, *D)
Prototype.l YMD_DateToAbsDayNum(Y, M, D, Gregorian)
Prototype.l YMD_AbsDayNumToDate(n, Gregorian, *Y, *M, *D)
Prototype.l YMD_GregorianToJulian(Yg, Mg, Dg, *Yj, *Mj, *Dj)
Prototype.l YMD_JulianToGregorian(Yj, Mj, Dj, *Yg, *Mg, *Dg)

YMD_DLL = OpenLibrary(#PB_Any, path$+"\calendar.dll") 
If YMD_DLL
  DayOfWeek.YMD_DayOfWeek = GetFunction(YMD_DLL, "DayOfWeek") 
  IsLeapYear.YMD_IsLeapYear = GetFunction(YMD_DLL, "IsLeapYear")
  MDToDayNum.YMD_MDToDayNum = GetFunction(YMD_DLL, "MDToDayNum")
  DayNumToMD.YMD_DayNumToMD = GetFunction(YMD_DLL, "DayNumToMD")
  DateToAbsDayNum.YMD_DateToAbsDayNum = GetFunction(YMD_DLL, "DateToAbsDayNum")
  AbsDayNumToDate.YMD_AbsDayNumToDate = GetFunction(YMD_DLL, "AbsDayNumToDate")
  GregorianToJulian.YMD_GregorianToJulian = GetFunction(YMD_DLL, "GregorianToJulian")
  JulianToGregorian.YMD_JulianToGregorian = GetFunction(YMD_DLL, "JulianToGregorian")
Else 
  MessageRequester("Erreur!", "Fichier DLL Absent!", #MB_ICONERROR) 
  End 
EndIf 

Y = 2011
M = 6
D = 24
Gregorian = 1
r =  DayOfWeek(Y, M, D, Gregorian)
Debug r

librairie: calendar.dll

Code : Tout sélectionner

;######################################################
;http://mikhajduk.houa.org/EN/Links.php
;  (C) Mikołaj Hajduk, 16.06.2008.
;######################################################
CatchImage(0,?calendar_dll_Start)  
Procedure ExpandBinaryfile(fichier.s)  
 If CreateFile(0,fichier)
  Lg= ?calendar_dll_End-?calendar_dll_Start 
  WriteData(0,?calendar_dll_Start,Lg) 
  CloseFile(0) 
 EndIf  
 ProcedureReturn  
EndProcedure  
ExpandBinaryfile("calendar.dll")  
;  IncludeBinary "Calendar.dll" [?Calendar_dll_Start , ?Calendar_dll_End]
;{ Size = 3584 bytes
DataSection
; PureBin2Data header
Data.l 3584
Data.b 0
; Data
Calendar_dll_Start:
Data.l $00805A4D,$00000001,$00100004,$0000FFFF,$00000140,$00000000,$00000040,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000080,$0EBA1F0E,$CD09B400,$4C01B821,$685421CD,$70207369,$72676F72,$63206D61,$6F6E6E61
Data.l $65622074,$6E757220,$206E6920,$20534F44,$65646F6D,$240A0D2E,$00000000,$00000000,$00004550,$0004014C,$485912B8,$00000000
Data.l $00000000,$210E00E0,$4301010B,$00000000,$00000000,$00000000,$00002000,$00000000,$00000000,$00400000,$00001000,$00000200
Data.l $00000001,$00000000,$00000004,$00000000,$00005000,$00000400,$0000984B,$00000002,$00001000,$00001000,$00010000,$00000000
Data.l $00000000,$00000010,$00003000,$000000F4,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00004000,$0000000E,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$7461642E,$00000061
Data.l $00000048,$00001000,$00000200,$00000400,$00000000,$00000000,$00000000,$C0000040,$646F632E,$00000065,$0000034A,$00002000
Data.l $00000400,$00000600,$00000000,$00000000,$00000000,$60000020,$6164652E,$00006174,$000000F4,$00003000,$00000200,$00000A00
Data.l $00000000,$00000000,$00000000,$40000040,$6C65722E,$0000636F,$0000000E,$00004000,$00000200,$00000C00,$00000000,$00000000
Data.l $00000000,$02000040,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$1E1F1C1F,$1F1F1E1F,$1F1E1F1E,$1E1F1D1F,$1F1F1E1F,$1F1E1F1E,$001F0000,$005A003B
Data.l $00970078,$00D400B5,$011100F3,$014E0130,$001F0000,$005B003C,$00980079,$00D500B6,$011200F4,$014F0131,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $B8E58955,$00000001,$000CC2C9,$9CE58955,$75FF5253,$1075FF14,$FF0C75FF,$22E80875,$85000001,$BB1174C0,$00000007,$C083D231
Data.l $F7D21105,$05EB92F3,$FFFFFFB8,$9D5B5AFF,$0010C2C9,$9CE58955,$45F75253,$FFFFFE0C,$8B2975FF,$C0850845,$03792274,$83D8F740
Data.l $74000C7D,$BBD2310F,$00000064,$D285F3F7,$D0890274,$0B72E8D1,$07EBE8D1,$FFFFFFB8,$0F06EBFF,$B60FC093,$9D5B5AC0,$0008C2C9
Data.l $9CE58955,$45F75253,$FFFFFE10,$833A75FF,$7201087D,$087D8334,$832E770C,$72010C7D,$105D8B28,$C15B1C8D,$558B02E3,$84B60F08
Data.l $400FFF13,$0C453900,$E3D10F77,$5384B70F,$00401016,$EB0C4503,$FFFFB805,$5B5AFFFF,$0CC2C99D,$E5895500,$5251539C,$FE0C45F7
Data.l $75FFFFFF,$087D8343,$B83D7201,$0000016D,$390C4503,$30770845,$8D0C5D8B,$E3C15B1C,$000CB903,$B70F0000,$10164B94,$55390040
Data.l $E2027708,$10458BF1,$4D8B0889,$8BD12908,$08891445,$05EBC031,$FFFFFFB8,$5B595AFF,$10C2C99D,$E5895500,$5251539C,$FE1445F7
Data.l $75FFFFFF,$1475FF79,$E80875FF,$FFFFFEE4,$74FFF883,$53C38969,$FF1075FF,$1DE80C75,$83FFFFFF,$5674FFF8,$83084D8B,$017F00F9
Data.l $A8C18141,$8300592B,$7400147D,$78C18303,$7500F983,$016C2D07,$34EB0000,$B8C38949,$0000016D,$E9C1E1F7,$01C80102,$147D83D8
Data.l $501D7400,$C889D231,$000019BB,$89F3F700,$C82958C1,$0102E9C1,$02C083C8,$C03102EB,$9D5B595A,$0010C2C9,$9CE58955,$83525153
Data.l $0F00087D,$0000EE84,$0C45F700,$FFFFFFFE,$00E1850F,$C9310000,$4808458B,$000C7D83,$F8836474,$8B1B7701,$03C7145D,$0000000C
Data.l $8B1EC083,$0389185D,$A6D3DFB9,$00ACE9FF,$E8830000,$BBD23102,$00023AB1,$048DF3F7,$80048D80,$9104E0C1,$8EAC3D92,$26720000
Data.l $2D64C183,$00008EAC,$008EAC3D,$83177200,$AC2D64C1,$3D00008E,$00008EAC,$C1830872,$8EAC2D64,$D2310000,$0005B5BB,$C1F3F700
Data.l $C10102E0,$6DFA8141,$72000001,$6DEA8125,$41000001,$016DFA81,$16720000,$016DEA81,$81410000,$00016DFA,$81077200,$00016DEA
Data.l $FF424100,$E8510C75,$FFFFFD98,$FF1875FF,$52501475,$FFFE2CE8,$0C7D83FF,$83037400,$E98178E9,$00592BA8,$7F00F983,$458B4901
Data.l $31088910,$B805EBC0,$FFFFFFFF,$9D5B595A,$0014C2C9,$6AE58955,$1075FF01,$FF0C75FF,$4EE80875,$85FFFFFE,$FF1374C0,$75FF1C75
Data.l $1475FF18,$E850006A,$FFFFFECC,$FFB805EB,$C9FFFFFF,$550018C2,$006AE589,$FF1075FF,$75FF0C75,$FE1BE808,$C085FFFF,$75FF1374
Data.l $1875FF1C,$6A1475FF,$99E85001,$EBFFFFFE,$FFFFB805,$C2C9FFFF,$00000018,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00003078,$00000001,$00000008,$00000008,$00003028
Data.l $00003048,$00003068,$000021D8,$00002145,$000020E5,$0000200C,$000022E4,$00002044,$00002317,$00002090,$00003085,$00003095
Data.l $000030A5,$000030B0,$000030BA,$000030CC,$000030D7,$000030E9,$00010000,$00030002,$00050004,$00070006,$656C6143,$7261646E
Data.l $6C6C642E,$73624100,$4E796144,$6F546D75,$65746144,$74614400,$416F5465,$61447362,$6D754E79,$79614400,$546D754E,$00444D6F
Data.l $4F796144,$65655766,$7247006B,$726F6765,$546E6169,$6C754A6F,$006E6169,$654C7349,$65597061,$4A007261,$61696C75,$476F546E
Data.l $6F676572,$6E616972,$54444D00,$7961446F,$006D754E,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00002000,$0000000E,$30D030C1,$0000311A,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Calendar_dll_End:
EndDataSection ;}
Dernière modification par kernadec le sam. 17/août/2013 8:26, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fonctions sur les dates

Message par Ar-S »

Comme ça ?
r = DayOfWeek(Date(Y, M, D, Gregorian,0,0))

Est-ce que ça marche ainsi ?, chez moi ça a l'air de le faire.

Code : Tout sélectionner


; Gestion de calendrier via Calendar.dll de Mikołaj Hajduk
; Créé par Kernadec
; Modifié par Ar-S

; Copiez la dll dans le même repertoire que le code.
Path$ = GetCurrentDirectory()

Global YMD_DLL, Gregorian.l, LeapYearFlag.l, Y.l, M.l, D.l, Yg.l, Mg.l, Dg.l, Yj.l, Mj.l, Dj.l, n.l

Prototype.l YMD_DayOfWeek(Y, M, D, Gregorian)
Prototype.l YMD_IsLeapYear(Y, Gregorian)
Prototype.l YMD_MDToDayNum(M, D, LeapYearFlag)
Prototype.l YMD_DayNumToMD(n, LeapYearFlag, *M, *D)
Prototype.l YMD_DateToAbsDayNum(Y, M, D, Gregorian)
Prototype.l YMD_AbsDayNumToDate(n, Gregorian, *Y, *M, *D)
Prototype.l YMD_GregorianToJulian(Yg, Mg, Dg, *Yj, *Mj, *Dj)
Prototype.l YMD_JulianToGregorian(Yj, Mj, Dj, *Yg, *Mg, *Dg)

YMD_DLL = OpenLibrary(#PB_Any, Path$+"calendar.dll") 
If YMD_DLL
	DayOfWeek.YMD_DayOfWeek = GetFunction(YMD_DLL, "DayOfWeek") 
	IsLeapYear.YMD_IsLeapYear = GetFunction(YMD_DLL, "IsLeapYear")
	MDToDayNum.YMD_MDToDayNum = GetFunction(YMD_DLL, "MDToDayNum")
	DayNumToMD.YMD_DayNumToMD = GetFunction(YMD_DLL, "DayNumToMD")
	DateToAbsDayNum.YMD_DateToAbsDayNum = GetFunction(YMD_DLL, "DateToAbsDayNum")
	AbsDayNumToDate.YMD_AbsDayNumToDate = GetFunction(YMD_DLL, "AbsDayNumToDate")
	GregorianToJulian.YMD_GregorianToJulian = GetFunction(YMD_DLL, "GregorianToJulian")
	JulianToGregorian.YMD_JulianToGregorian = GetFunction(YMD_DLL, "JulianToGregorian")
Else 
	MessageRequester("Erreur!", "Fichier DLL Absent!", #MB_ICONERROR) 
	End 
EndIf 

Dim Jours.s(6)
Jours(0) = "Dimanche"
Jours(1) = "Lundi"
Jours(2) = "Mardi"
Jours(3) = "Mercredi"
Jours(4) = "Jeudi"
Jours(5) = "Vendredi"
Jours(6) = "Samedi"

Y = 2011
M = 6
D = 24
Gregorian = 1
r =  DayOfWeek(Date(Y, M, D, Gregorian,0,0))

JourCible$=Jours(r)
Debug "Le "+Str(D)+"/"+Str(M)+"/"+Str(Y)+" est un "+JourCible$ 


~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fonctions sur les dates

Message par kernadec »

bonjour Ar-s
Merci, ça Alors.... Dans la doc de la lib, il n'y à pas de paramètres au delà de Grégorian ?
mais oui cela fonctionne, c'est même top..
et je suis très très content, merci Beaucoup Ar-s.

Cordialement
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fonctions sur les dates

Message par kernadec »

Après vérification, j'ai un soucis le calcul des jours est faux par moment
je viens de vérifier plusieurs 1 janvier dans la période 1900 à 2000 à l'aide d'éphémérides "Michelsen"
il semblerait qu'il aime plus le jeudi pour débuter l'année... 8O
pas mal d"erreurs, c'est embêtant un truc pareil... :(

Cordialement
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fonctions sur les dates

Message par kernadec »

bonsoir
Avec les prototypes, je ne suis pas arrivé à utiliser cette librairie.
Alors qu' avec CallFunction() elle fonctionne, Enfin pour DayOfWeek les paramètres sont bien transmis.
Toutes les dates que j'ai vérifiée ont étés concluantes pour le moment...
tout cela semble bien fonctionner a présent..

Pour la vérification des dates :http://www.vendredi13.us/CalendrierJuli ... sseur.html

Cordialement

Code : Tout sélectionner

;### load calendar.dll  --  http://www.winasm.net/forum/index.php?showtopic=2488
; Gestion de calendrier via Calendar.dll de MikoÅ‚aj Hajduk  (pour 11 millions d'années)
; Créé par Kernadec
; Modifié par Ar-S

; Copiez la dll dans le même repertoire que le code.

Path$ = GetCurrentDirectory() 
Global YMD_DLL, Gregorian.l, LeapYearFlag.l, Y.l, M.l, D.l, Yg.l, Mg.l, Dg.l, Yj.l, Mj.l, Dj.l, n.l
Dim Jours.s(6)
Jours(0) = "Dimanche"
Jours(1) = "Lundi"
Jours(2) = "Mardi"
Jours(3) = "Mercredi"
Jours(4) = "Jeudi"
Jours(5) = "Vendredi"
Jours(6) = "Samedi"


Y=2011
M=6
D=24
gregorian=1


YMD_DLL=OpenLibrary(#PB_Any, Path$+"calendar.dll") 
If YMD_DLL
		;Cette fonction calcule le jour de la semaine pour la date donnée
		 Result = CallFunction(YMD_DLL, "DayOfWeek",Y, M, D, Gregorian) 
		 jourCible$=Jours(Result)
		
Debug "Le "+Str(D)+"/"+Str(M)+"/"+Str(Y)+" est un "+JourCible$     
		
		;Cette fonction détermine si l'année donnée est bissextile dans le calendrier choisi
		 Result = CallFunction(YMD_DLL, "IsLeapYear",Y, Gregorian) 
		
If result=1
	Debug "Bissextile"
Else
	Debug "Non Bissextile"
EndIf

LeapYearFlag=result

		;Cette fonction calcule le nombre ordinal du jour dans l'année
		 Result = CallFunction(YMD_DLL, "MDToDayNum",M, D, LeapYearFlag) 
		
Debug "Nombre Ordinal du Jour de l'année = "+Str(result)

n=result

		;Cette fonction calcule à partir d'un nombre ordinal le jour dans l'année.
		 CallFunction(YMD_DLL, "DayNumToMD",n, LeapYearFlag, @M, @D) 
		
Debug "Jour et Mois de l'année à partir d'un nombre ordinal = "+Str(D)+"/"+Str(M)
			
		;Cette fonction convertit la date en nombre absolu de jour (pour le calendrier choisi) 
		 Result = CallFunction(YMD_DLL, "DateToAbsDayNum",Y, M, D, Gregorian)
			
Debug "Nombre de Jours  = "+Str(result)   

n=Result

		;Cette fonction convertit le nombre absolu de jour "N(epsilon) {1,2,...2^32}" à la date appropriée (pour le calendrier choisi).
		 CallFunction(YMD_DLL, "AbsDayNumToDate",n, Gregorian, @Y, @M, @D) 

Debug "Conversion nb Jour en Date = "+Str(D)+"/"+Str(M)+"/"+Str(Y)

Yg=Y:Mg=M:Dg=D

		;Cette fonction convertit la date grégorienne à la date appropriée Julian
		 CallFunction(YMD_DLL, "GregorianToJulian",Yg, Mg, Dg, @Yj, @Mj, @Dj) 

Debug "Conversion de Date Gregorian en Julien = "+Str(Dj)+"/"+Str(Mj)+"/"+Str(Yj)   

		;Cette fonction convertit la date julienne à la date appropriée grégorien.
		 CallFunction(YMD_DLL, "JulianToGregorian",Yj, Mj, Dj, @Yg, @Mg, @Dg) 

Debug "Conversion de Date Julian en Gregorian = "+Str(Dg)+"/"+Str(Mg)+"/"+Str(Yg)    
			
EndIf
CloseLibrary(YMD_DLL) 
Dernière modification par kernadec le sam. 25/juin/2011 18:25, modifié 2 fois.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fonctions sur les dates

Message par kernadec »

bonjour
Voilà: je viens de faire les tests d' utilisation complet de la lib "calendar.dll"
super lib, en tous cas bravo à "MikoÅ‚aj Hajduk" que je remercie au passage.
voir code du post précédent.

Cordialement
Répondre