Heures d'été en France

Programmation d'applications complexes
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 140
Inscription : mer. 28/janv./2009 13:28

Heures d'été en France

Message par Philippe_GEORGES »

Bonjour

Pour une date donnée, je voudrais déterminer s'il y a lieu d'appliquer ou non l'heure d'été. (-1h ou -2 h par rapport à l'heure GMT)

Je sais que le sujet a déja été traité, mais impossible de retrouver le post.

Si quelqu'un a une idée à ce sujet...

Merci d'avance,

Phil
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Heures d'été en France

Message par MLD »

@ phiilippe_GEORGES
Pour ton information ce n'est pas GMT -1h ou -2h, mais GMT + 1h ou +2h
Le changement se fait au printemps et a l'automne.mais attention les dates sont variables en fonction de certaines années. Pour l'automne entre le 19 et le 21 mars.
Il semble que bientôt il n'y aura plus de changement d'heure. :roll:
Si je retrouve le calcul, je le posterais.
a+
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Heures d'été en France

Message par Micoute »

Voilà quelques petites procédures pour arranger le coup.

le printemps commence le dernier dimanche de mars et l'automne le dernier dimanche d'octobre.

Code : Tout sélectionner

;Premier dimanche du mois
Procedure TrouverPremierDimanche(Annee,Mois)
  Protected Jour=1
  Protected DatePremierDimanche=Date(Annee,Mois,Jour,0,0,0)
  
  ;Cherche le premier dimanche
  While DayOfWeek(DatePremierDimanche)<>0
    
    Jour+1
    DatePremierDimanche=Date(Annee,Mois,Jour,0,0,0)
  Wend
  
  ProcedureReturn DatePremierDimanche
  
EndProcedure
;Second dimanche du mois
Procedure TrouverDeuxiemeDimanche(Annee,Mois)
  Protected Jour=8
  Protected DateDeuxiemeDimanche=Date(Annee,Mois,Jour,0,0,0)
  
  ;Cherche le deuxième dimanche
  While DayOfWeek(DateDeuxiemeDimanche)<>0
    
    Jour+1
    DateDeuxiemeDimanche=Date(Annee,Mois,Jour,0,0,0)
  Wend
  
  ProcedureReturn DateDeuxiemeDimanche
  
EndProcedure
;Troisième jour du mois
Procedure TrouverTroisiemeDimanche(Annee,Mois)
  Protected Jour=15
  Protected DateTroisiemeDimanche=Date(Annee,Mois,Jour,0,0,0)
  
  ;Cherche le Troisième dimanche
  While DayOfWeek(DateTroisiemeDimanche)<>0
    
    Jour+1
    DateTroisiemeDimanche=Date(Annee,Mois,Jour,0,0,0)
  Wend
  
  ProcedureReturn DateTroisiemeDimanche
  
EndProcedure
;Pénultième dimanche du mois
Procedure TrouverQuatriemeDimanche(Annee,Mois)
  Protected Jour=22
  Protected DateQuatriemeDimanche=Date(Annee,Mois,Jour,0,0,0)
  
  ;Cherche le Quatrième dimanche
  While DayOfWeek(DateQuatriemeDimanche)<>0
    
    Jour+1
    DateQuatriemeDimanche=Date(Annee,Mois,Jour,0,0,0)
  Wend
  
  ProcedureReturn DateQuatriemeDimanche
  
EndProcedure
;Dernier dimanche du mois
Procedure TrouverDernierDimanche(Annee,Mois)
  Protected Jour=JoursDansMois() - 6
  Protected DateDernierDimanche=Date(Annee,Mois,Jour,0,0,0)
  
  ;Cherche le dernier dimanche
  While DayOfWeek(DateDernierDimanche)<>0
    
    Jour+1
    DateDernierDimanche=Date(Annee,Mois,Jour,0,0,0)
  Wend
  ProcedureReturn DateDernierDimanche
  
EndProcedure
Procedure Heure_d_ete(Annee=-1)
  Protected Resultat = TrouverDernierDimanche(Annee,3) ;l'heure d'été commence toujours le dernier dimanche de mars
  If Resultat = -1
    Resultat = TrouverQuatriemeDimanche(Annee,3)
  EndIf  
  ProcedureReturn Resultat
EndProcedure
Procedure Heure_d_hiver(Annee=-1) ;l'heure d'hiver commence toujours le dernier dimanche d'octobre
  Protected Resultat
  Resultat = TrouverDernierDimanche(Annee,10)
  If Resultat = -1
    Resultat = TrouverQuatriemeDimanche(Annee,10)
  EndIf  
  ProcedureReturn Resultat
EndProcedure
[/Code_pb]
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 140
Inscription : mer. 28/janv./2009 13:28

Re: Heures d'été en France

Message par Philippe_GEORGES »

Merci, c'est un bon début !!

Par contre, il me manque la fonction JoursDansMois()



Phil
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Heures d'été en France

Message par kernadec »

bsr Philippe
perso; j utilise les infos contenues dans ce livre, c'est le plus complet que je connais
acheté dans les années 80 quand j'écrivais un programme d'astro sur un apple deux E 8O
mais si tu as mieux, je suis preneur :mrgreen: mais on en trouve encore des exemplaires.
https://www.chasse-aux-livres.fr/prix/B ... de-gabriel

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

Re: Heures d'été en France

Message par Micoute »

Code : Tout sélectionner

Procedure.b SiBissextile(Annee=-1)
  ;Retourne Vrai si l'année est une année bissextile (366 jours)
  ;S'il n'y a aucun argument, l'année en cours est utilisée
  ;Dans le calendrier grégorien, l'année bissextile est
  ;toute année divisible par 4,sauf
  ;année du centenaire non divisible par 400
  ;L'année équinoxe de printemps est d'environ 365.242374 jours longs (et croissants)
  ;Le calendrier iranien est basé sur 8 jours bissextiles tous les 33ans (365,242424 jours)
  ;dictionary.die.net/leap%20year
  ;en.wikipedia.org/wiki/Leap_year
  If Annee<=0
    Annee=Year(Date())
  EndIf;Cetteannée
  If(Mod(Annee,4)=0 And Mod(Annee,100)<>0)Or(Mod(Annee,400)=0)
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure
Procedure.b JoursDansMois(Annee=-1,Mois=-1)
  ;Retourne le nombre de jours dans le mois donné (28..31)
  ;Si l'année est absente, l'année en cours est utilisée
  ;Si l'année est présente mais le mois est absent,février est utilisé
  ;Si l'année et le mois sont tous deux absents, le mois courant de l'année en cours est utilisé
  
  Protected Jours
  
  If Annee = -1
    Annee=Year(Date())
    If Mois = -1
      Mois=Month(Date())
    EndIf
  Else
    If Mois <= 0 : Mois = 2 : EndIf
  EndIf
  
  If Mois=2
    If SiBissextile(Annee)
      Jours=29
    Else
      Jours=28
    EndIf
  Else
    jours=31 - $A55 >> Mois & 1
  EndIf
  NbjoursMois=Jours
  ProcedureReturn NbjoursMois
EndProcedure
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Heures d'été en France

Message par MLD »

Salut a tous
Bon je n'est pas retrouvé le code en question.
Alors j'ai fait ceci a l'arrache. Si tu n'a pas besoin de savoir que c'est a 3H du matin que l'heure change. Sinon il c'est facile d'ajouter l'heure du changement.

Code : Tout sélectionner

Procedure HIE()
  Dt$ =  FormatDate("%dd/%mm/%yyyy", Date())
  J$ = Left(Dt$,2): M$ = Mid(Dt$,4,2):A$ = Right(Dt$,4)
   ;J$ = "26":M$ = "3"; pour faire des simulations de dates
   Debug j$ + "  " + M$ + "  " + A$
Select Val(M$)   
  Case 4 To 9
    ProcedureReturn 2
  Case 1,2,11,12
    ProcedureReturn 1
  Case 3,10    
   For z = 1 To 31
    If DayOfWeek(Date(Val(A$), Val(M$), z, 0, 0, 0)) = 0
     I = z 
   EndIf  
  Next
  If Val(M$)= 3 
   If Val(J$) >= i :ProcedureReturn 2:Else:ProcedureReturn 1:EndIf
  EndIf
  If Val(M$)= 10 
   If Val(J$) >= i :ProcedureReturn 1:Else:ProcedureReturn 2:EndIf
  EndIf  
 EndSelect
EndProcedure
result =HIE()
;********************** Test ***********************************
If result = 2
  Debug"Heure GMT + 2 : Heure d'été"
Else
  Debug"Heure GMT + 1 : Heure d'hiver"
EndIf
Un petit bonjour a mon amis Micoute de retour sur le forum
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Heures d'été en France

Message par MLD »

Bon:j'ai optimisé le code :D
Bonne journée a tous

Code : Tout sélectionner

[quote]
Procedure HIE()
  Dt$ =  FormatDate("%dd/%mm/%yyyy", Date())
  J = Val(Left(Dt$,2)): M = Val(Mid(Dt$,4,2)):A = Val(Right(Dt$,4))
   ; = 29:M = 3; pour faire des simulations de dates
Select M   
  Case 4 To 9
    ProcedureReturn 2
  Case 1,2,11,12
    ProcedureReturn 1
  Case 3,10    
   For z = 31 To 1 Step -1
    If DayOfWeek(Date(A, M, z, 0, 0, 0)) = 0
     I = z :Break
   EndIf  
  Next
  If M = 3 
   If J >= i :ProcedureReturn 2:Else:ProcedureReturn 1:EndIf
  EndIf
  If M = 10 
   If J >= i :ProcedureReturn 1:Else:ProcedureReturn 2:EndIf
  EndIf  
 EndSelect
EndProcedure
result =HIE()
;********************** Test ***********************************
If result = 2
  Debug"Heure GMT + 2 : Heure d'été"
Else
  Debug"Heure GMT + 1 : Heure d'hiver"
EndIf
[/quote]
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Heures d'été en France

Message par Mesa »

Code : Tout sélectionner

EnableExplicit

Define TIME_ZONE_INFORMATION.TIME_ZONE_INFORMATION

Select GetTimeZoneInformation_(TIME_ZONE_INFORMATION)
  Case #TIME_ZONE_ID_UNKNOWN
    Debug "Unknown"
  Case #TIME_ZONE_ID_STANDARD
    Debug "Heure d'hivers"
  Case #TIME_ZONE_ID_DAYLIGHT
    Debug "Heure d'été"
EndSelect

Code : Tout sélectionner

;   Description: Returns the status of whether the current time is daylight saving time
;            OS: Windows, Linux, Mac
; English-Forum: 
;  French-Forum: 
;  German-Forum: 
; -----------------------------------------------------------------------------

; MIT License
; 
; Copyright (c) 2017-2018 Sicro
; 
; Permission is hereby granted, free of charge, to any person obtaining a copy
; of this software and associated documentation files (the "Software"), to deal
; in the Software without restriction, including without limitation the rights
; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
; copies of the Software, and to permit persons to whom the Software is
; furnished to do so, subject to the following conditions:
; 
; The above copyright notice and this permission notice shall be included in all
; copies or substantial portions of the Software.
; 
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
; SOFTWARE.

Procedure.i IsDayLightSavingTime()
	
	CompilerSelect #PB_Compiler_OS
			
		CompilerCase #PB_OS_Windows
			; https://msdn.microsoft.com/de-de/library/windows/desktop/ms724421(v=vs.85).aspx
			
			Protected.TIME_ZONE_INFORMATION lpTimeZoneInformation
			
			Select GetTimeZoneInformation_(@lpTimeZoneInformation)
				Case #TIME_ZONE_ID_STANDARD : ProcedureReturn #False
				Case #TIME_ZONE_ID_DAYLIGHT : ProcedureReturn #True
				Case #TIME_ZONE_ID_UNKNOWN  : ProcedureReturn -1
			EndSelect
			
		CompilerCase #PB_OS_Linux
			; https://linux.die.net/man/2/time
			; https://linux.die.net/man/3/localtime
			
			CompilerIf Not Defined(tm, #PB_Structure)
				Structure tm Align #PB_Structure_AlignC
					tm_sec.l    ; 0 à 59 ou jusqu'à 60 pour les secondes intercalaires 
					tm_min.l		; 0 à 59
					tm_hour.l		; 0 à 23
					tm_mday.l		; Jour du mois : 1 à 31 
					tm_mon.l		; Mmois : 0 à 11 (mois depuis janvier) 
					tm_year.l		; Nombre d'années depuis l'an 1900 
					tm_wday.l		; Jour de la semaine : 0 à 6, 0 = dimanche 
					tm_yday.l		; Jours depuis le début de l'année : 0 à 365 (donc 365 est 366 puisqu'il compte après le 1er janvier) 
					tm_isdst.l	; heure d'été ? tm_isdst > 0 = Oui 
											;                             tm_isdst = 0 = Non
											;                             tm_isdst < 0 = inconnu
					CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
						tm_gmtoff.l ; Décalage par rapport à UTC en secondes
						*tm_zone		; Nom de l'abréviation du fuseau horaire
					CompilerElse
						tm_zone.l   ; espace réservé 
						tm_gmtoff.l	; Décalage par rapport à UTC en secondes 
						*tm_zone64	; Nom de l'abréviation du fuseau horaire
					CompilerEndIf    
				EndStructure
			CompilerEndIf
			
			Protected.tm *CurrentTime = time_(0)
			Protected.tm *LocalTime   = localtime_(@*CurrentTime)
			
			If *LocalTime\tm_isdst > 0
				ProcedureReturn #True
			ElseIf *LocalTime\tm_isdst = 0
				ProcedureReturn #False
			ElseIf *LocalTime\tm_isdst < 0
				ProcedureReturn -1
			EndIf
			
		CompilerCase #PB_OS_MacOS
			; http://www.purebasic.fr/english/viewtopic.php?p=410207#p410207
			
			Protected TimeZoneObject = CocoaMessage(0, 0, "NSTimeZone systemTimeZone")
			Protected DaylightSavingTime
			
			CocoaMessage(@DaylightSavingTime, TimeZoneObject, "isDaylightSavingTime")
			
			ProcedureReturn DaylightSavingTime
			
	CompilerEndSelect
	
EndProcedure

;-Example
CompilerIf #PB_Compiler_IsMainFile
	
	Select IsDayLightSavingTime()
		Case #True  : Debug "Heure d'été !"
		Case #False : Debug "Heure d'hiver !"
		Default     : Debug "inconnu !"
	EndSelect
	
CompilerEndIf

Code : Tout sélectionner

Procedure ChercheDernierDimanche(Annee, Mois)
	Jour=31
	DateDernierDimanche=Date(Annee, Mois, Jour, 0, 0, 0)
	
	;Cherche le dernier dimanche
	While DayOfWeek(DateDernierDimanche)<>0
		
		jour - 1
		DateDernierDimanche= Date(annee, mois, jour, 0, 0, 0)
	Wend
	
	ProcedureReturn DateDernierDimanche
EndProcedure

Procedure HeureEte_ChangementdeDate(Date)
;Printemps : 
;- passer de l'heure normale à l'heure d'été 
;- l'horloge est avancée d'une heure à à 2h le dernier dimanche du mois de mars.
;Automne   : 
;- passer de l'heure d'été à l'heure normale 
;- l'horloge est retardée d'une heure à 3h le dernier dimanche du mois d'octobre.


#Printemps = 3
#Automne   = 10

; Annee = Val(InputRequester("Changement d'heure", "Quelle année ?", Str(Year(Date()))))
Annee = Date;Year(Date);Year(Date())
If Annee > 1970 And Annee < 2038
	Dimanche = ChercheDernierDimanche(Annee, #Printemps)
	Debug  "Passage de l'heure normale à l'heure d'été = " + Str(Day(Dimanche)) + "/" + Str(Month(Dimanche)) + "/" + Str(Year(Dimanche)) 
	
	Dimanche = ChercheDernierDimanche(Annee, #Automne)
	Debug  "Passage de l'heure d'été à l'heure normale = " +  Str(Day(Dimanche)) + "/" + Str(Month(Dimanche)) + "/" + Str(Year(Dimanche)) 
EndIf

; Petit rappel sur l'heure d'été en France, elle ne date que depuis l'année 1976
; (sinon, elle avait aussi été en vigueur dans les années 1942 à 1945)
; 
; je dois ajouter que la règle des dates a subit des variantes, exemple:
; de 1977 à 1980 c'était le premier week-end d'avril et le dernier de septembre
; ensuite le dernier week-End de septembre a continué d'être en vigueur jusque 1995 pour passer à fin octobre en 1996
; 
; Cordialement
; 
; Historique des dates:
; Année : 1976
; Passage à l'heure d'été le Dimanche 28 Mars 1976 - 00 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Samedi 25 Septembre 1976 - 23 h 00 (GMT + 1 h ) CET
; Année : 1977
; Passage à l'heure d'été le Dimanche 3 Avril 1977 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 25 Septembre 1977 - 01 h 00 (GMT + 1 h ) CET
; Année : 1978
; Passage à l'heure d'été le Dimanche 2 Avril 1978 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 1 Octobre 1978 - 01 h 00 (GMT + 1 h ) CET
; Année : 1979
; Passage à l'heure d'été le Dimanche 1 Avril 1979 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 30 Septembre 1979 - 01 h 00 (GMT + 1 h ) CET
; Année : 1980
; Passage à l'heure d'été le Dimanche 6 Avril 1980 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 28 Septembre 1980 - 01 h 00 (GMT + 1 h ) CET
; Année : 1981
; Passage à l'heure d'été le Dimanche 29 Mars 1981 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 27 Septembre 1981 - 01 h 00 (GMT + 1 h ) CET
; Année : 1982
; Passage à l'heure d'été le Dimanche 28 Mars 1982 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 26 Septembre 1982 - 01 h 00 (GMT + 1 h ) CET
; Année : 1983
; Passage à l'heure d'été le Dimanche 27 Mars 1983 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 25 Septembre 1983 - 01 h 00 (GMT + 1 h ) CET
; Année : 1984
; Passage à l'heure d'été le Dimanche 25 Mars 1984 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 30 Septembre 1984 - 01 h 00 (GMT + 1 h ) CET
; Année : 1985
; Passage à l'heure d'été le Dimanche 31 Mars 1985 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 29 Septembre 1985 - 01 h 00 (GMT + 1 h ) CET
; Année : 1986
; Passage à l'heure d'été le Dimanche 30 Mars 1986 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 28 Septembre 1986 - 01 h 00 (GMT + 1 h ) CET
; Année : 1987
; Passage à l'heure d'été le Dimanche 29 Mars 1987 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 27 Septembre 1987 - 01 h 00 (GMT + 1 h ) CET
; Année : 1988
; Passage à l'heure d'été le Dimanche 27 Mars 1988 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 25 Septembre 1988 - 01 h 00 (GMT + 1 h ) CET
; Année : 1989
; Passage à l'heure d'été le Dimanche 26 Mars 1989 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 24 Septembre 1989 - 01 h 00 (GMT + 1 h ) CET
; Année : 1990
; Passage à l'heure d'été le Dimanche 25 Mars 1990 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 30 Septembre 1990 - 01 h 00 (GMT + 1 h ) CET
; Année : 1991
; Passage à l'heure d'été le Dimanche 31 Mars 1991 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 29 Septembre 1991 - 01 h 00 (GMT + 1 h ) CET
; Année : 1992
; Passage à l'heure d'été le Dimanche 29 Mars 1992 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 27 Septembre 1992 - 01 h 00 (GMT + 1 h ) CET
; Année : 1993
; Passage à l'heure d'été le Dimanche 28 Mars 1993 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 26 Septembre 1993 - 01 h 00 (GMT + 1 h ) CET
; Année : 1994
; Passage à l'heure d'été le Dimanche 27 Mars 1994 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 25 Septembre 1994 - 01 h 00 (GMT + 1 h ) CET
; Année : 1995
; Passage à l'heure d'été le Dimanche 26 Mars 1995 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 24 Septembre 1995 - 01 h 00 (GMT + 1 h ) CET
; Année : 1996
; Passage à l'heure d'été le Dimanche 31 Mars 1996 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 27 Octobre 1996 - 01 h 00 (GMT + 1 h ) CET
; Année : 1997
; Passage à l'heure d'été le Dimanche 30 Mars 1997 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 26 Octobre 1997 - 01 h 00 (GMT + 1 h ) CET
; Année : 1998
; Passage à l'heure d'été le Dimanche 29 Mars 1998 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 25 Octobre 1998 - 01 h 00 (GMT + 1 h ) CET
; Année : 1999
; Passage à l'heure d'été le Dimanche 28 Mars 1999 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 31 Octobre 1999 - 01 h 00 (GMT + 1 h ) CET
; Année : 2000
; Passage à l'heure d'été le Dimanche 26 Mars 2000 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 29 Octobre 2000 - 01 h 00 (GMT + 1 h ) CET
; Année : 2001
; Passage à l'heure d'été le Dimanche 25 Mars 2001 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 28 Octobre 2001 - 01 h 00 (GMT + 1 h ) CET
; Année : 2002
; Passage à l'heure d'été le Dimanche 31 Mars 2002 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 27 Octobre 2002 - 01 h 00 (GMT + 1 h ) CET
; Année : 2003
; Passage à l'heure d'été le Dimanche 30 Mars 2003 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 26 Octobre 2003 - 01 h 00 (GMT + 1 h ) CET
; Année : 2004
; Passage à l'heure d'été le Dimanche 28 Mars 2004 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 31 Octobre 2004 - 01 h 00 (GMT + 1 h ) CET
; Année : 2005
; Passage à l'heure d'été le Dimanche 27 Mars 2005 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 30 Octobre 2005 - 01 h 00 (GMT + 1 h ) CET
; Année : 2006
; Passage à l'heure d'été le Dimanche 26 Mars 2006 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 29 Octobre 2006 - 01 h 00 (GMT + 1 h ) CET
; Année : 2007
; Passage à l'heure d'été le Dimanche 25 Mars 2007 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 28 Octobre 2007 - 01 h 00 (GMT + 1 h ) CET
; Année : 2008
; Passage à l'heure d'été le Dimanche 30 Mars 2008 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 26 Octobre 2008 - 01 h 00 (GMT + 1 h ) CET
; Année : 2009
; Passage à l'heure d'été le Dimanche 29 Mars 2009 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 25 Octobre 2009 - 01 h 00 (GMT + 1 h ) CET
; Année : 2010
; Passage à l'heure d'été le Dimanche 28 Mars 2010 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 31 Octobre 2010 - 01 h 00 (GMT + 1 h ) CET
; Année : 2011
; Passage à l'heure d'été le Dimanche 27 Mars 2011 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 30 Octobre 2011 - 01 h 00 (GMT + 1 h ) CET
; Année : 2012
; Passage à l'heure d'été le Dimanche 25 Mars 2012 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 28 Octobre 2012 - 01 h 00 (GMT + 1 h ) CET
; Année : 2013
; Passage à l'heure d'été le Dimanche 31 Mars 2013 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 27 Octobre 2013 - 01 h 00 (GMT + 1 h ) CET
; Année : 2014
; Passage à l'heure d'été le Dimanche 30 Mars 2014 - 01 h 00 (GMT + 2 h ) CEST
; Retour à l'heure normale le Dimanche 26 Octobre 2014 - 01 h 00 (GMT + 1 h ) CET
EndProcedure
	
	HeureEte_ChangementdeDate(2023)
Mon propre code

Code : Tout sélectionner

; Depuis 1996
; ;     la période de l'heure d'été commence à 1 h UTC, le dernier dimanche de mars ;
; ;     la période de l'heure d'été se termine à 1 h UTC, le dernier dimanche d'octobre.
; 2023 Début: 02:00 26 mars Fin: 03:00 29 octobre

Procedure HE(date)
	;France
	fuseau=1
	hpassage=fuseau+1;1hutc
	
	A=Year(Date)
	M=Month(Date)
	J=Day(date)
	
	;   0 = Dimanche
	;   1 : Lundi
	;   2 : Mardi
	;   3 : Mercredi
	;   4 : Jeudi
	;   5 : Vendredi
	;   6 : Samedi
	
	
	Tmpdate1=Date(A, 3, 31, hpassage, 0, 0)
	dow1=DayOfWeek(Tmpdate1)
	date1=Date(A, 3, 31-dow1, hpassage, 0, 0)
	Tmpdate2=Date(A,10,31, hpassage, 0, 0)
	dow2=DayOfWeek(Tmpdate2)
	date2=Date(A,10,31-dow2, hpassage+1, 0, 0)
	
	If (dow1>-1) And(dow2)>-1
		If (date>=date1) And (date<=date2)
			ProcedureReturn 1
		Else
			ProcedureReturn 0
		EndIf
	Else
		Debug "erreur"
		ProcedureReturn -1
	EndIf
EndProcedure

result =HE(Date())
Debug result

Select  result 
	Case 1
		Debug"Heure GMT + 2 : Heure d'été"
	Case 0
		Debug"Heure GMT + 1 : Heure d'hiver"
	Default
		Debug "erreur"
EndSelect

M.
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 140
Inscription : mer. 28/janv./2009 13:28

Re: Heures d'été en France

Message par Philippe_GEORGES »

Merci Mesa !!

Je pense avoir tout ce qu'il faut, avec un code portable Windows/Mac

Phil
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Répondre