Bonjour ,
Il est possible de calculer le jour exact où le changement horaire de l'heure d' Eté intervient . J'ai pu faire une simulation ci-dessous .
Code : Tout sélectionner
calendrier(2026)
Jan | Fev | Mar | Avr | Mai | Jun | Jul | Aou | Sep | Oct | Nov | Dec |
Jeu 1 |Dim 1 |Dim 1 |Mer 1 H+1|Ven 1 H+1|Lun 1 H+1|Mer 1 H+1|Sam 1 H+1|Mar 1 H+1|Jeu 1 H+1|Dim 1 |Mar 1 |
Ven 2 |Lun 2 |Lun 2 |Jeu 2 H+1|Sam 2 H+1|Mar 2 H+1|Jeu 2 H+1|Dim 2 H+1|Mer 2 H+1|Ven 2 H+1|Lun 2 |Mer 2 |
Sam 3 |Mar 3 |Mar 3 |Ven 3 H+1|Dim 3 H+1|Mer 3 H+1|Ven 3 H+1|Lun 3 H+1|Jeu 3 H+1|Sam 3 H+1|Mar 3 |Jeu 3 |
Dim 4 |Mer 4 |Mer 4 |Sam 4 H+1|Lun 4 H+1|Jeu 4 H+1|Sam 4 H+1|Mar 4 H+1|Ven 4 H+1|Dim 4 H+1|Mer 4 |Ven 4 |
Lun 5 |Jeu 5 |Jeu 5 |Dim 5 H+1|Mar 5 H+1|Ven 5 H+1|Dim 5 H+1|Mer 5 H+1|Sam 5 H+1|Lun 5 H+1|Jeu 5 |Sam 5 |
Mar 6 |Ven 6 |Ven 6 |Lun 6 H+1|Mer 6 H+1|Sam 6 H+1|Lun 6 H+1|Jeu 6 H+1|Dim 6 H+1|Mar 6 H+1|Ven 6 |Dim 6 |
Mer 7 |Sam 7 |Sam 7 |Mar 7 H+1|Jeu 7 H+1|Dim 7 H+1|Mar 7 H+1|Ven 7 H+1|Lun 7 H+1|Mer 7 H+1|Sam 7 |Lun 7 |
Jeu 8 |Dim 8 |Dim 8 |Mer 8 H+1|Ven 8 H+1|Lun 8 H+1|Mer 8 H+1|Sam 8 H+1|Mar 8 H+1|Jeu 8 H+1|Dim 8 |Mar 8 |
Ven 9 |Lun 9 |Lun 9 |Jeu 9 H+1|Sam 9 H+1|Mar 9 H+1|Jeu 9 H+1|Dim 9 H+1|Mer 9 H+1|Ven 9 H+1|Lun 9 |Mer 9 |
Sam 10 |Mar 10 |Mar 10 |Ven 10 H+1|Dim 10 H+1|Mer 10 H+1|Ven 10 H+1|Lun 10 H+1|Jeu 10 H+1|Sam 10 H+1|Mar 10 |Jeu 10 |
Dim 11 |Mer 11 |Mer 11 |Sam 11 H+1|Lun 11 H+1|Jeu 11 H+1|Sam 11 H+1|Mar 11 H+1|Ven 11 H+1|Dim 11 H+1|Mer 11 |Ven 11 |
Lun 12 |Jeu 12 |Jeu 12 |Dim 12 H+1|Mar 12 H+1|Ven 12 H+1|Dim 12 H+1|Mer 12 H+1|Sam 12 H+1|Lun 12 H+1|Jeu 12 |Sam 12 |
Mar 13 |Ven 13 |Ven 13 |Lun 13 H+1|Mer 13 H+1|Sam 13 H+1|Lun 13 H+1|Jeu 13 H+1|Dim 13 H+1|Mar 13 H+1|Ven 13 |Dim 13 |
Mer 14 |Sam 14 |Sam 14 |Mar 14 H+1|Jeu 14 H+1|Dim 14 H+1|Mar 14 H+1|Ven 14 H+1|Lun 14 H+1|Mer 14 H+1|Sam 14 |Lun 14 |
Jeu 15 |Dim 15 |Dim 15 |Mer 15 H+1|Ven 15 H+1|Lun 15 H+1|Mer 15 H+1|Sam 15 H+1|Mar 15 H+1|Jeu 15 H+1|Dim 15 |Mar 15 |
Ven 16 |Lun 16 |Lun 16 |Jeu 16 H+1|Sam 16 H+1|Mar 16 H+1|Jeu 16 H+1|Dim 16 H+1|Mer 16 H+1|Ven 16 H+1|Lun 16 |Mer 16 |
Sam 17 |Mar 17 |Mar 17 |Ven 17 H+1|Dim 17 H+1|Mer 17 H+1|Ven 17 H+1|Lun 17 H+1|Jeu 17 H+1|Sam 17 H+1|Mar 17 |Jeu 17 |
Dim 18 |Mer 18 |Mer 18 |Sam 18 H+1|Lun 18 H+1|Jeu 18 H+1|Sam 18 H+1|Mar 18 H+1|Ven 18 H+1|Dim 18 H+1|Mer 18 |Ven 18 |
Lun 19 |Jeu 19 |Jeu 19 |Dim 19 H+1|Mar 19 H+1|Ven 19 H+1|Dim 19 H+1|Mer 19 H+1|Sam 19 H+1|Lun 19 H+1|Jeu 19 |Sam 19 |
Mar 20 |Ven 20 |Ven 20 |Lun 20 H+1|Mer 20 H+1|Sam 20 H+1|Lun 20 H+1|Jeu 20 H+1|Dim 20 H+1|Mar 20 H+1|Ven 20 |Dim 20 |
Mer 21 |Sam 21 |Sam 21 |Mar 21 H+1|Jeu 21 H+1|Dim 21 H+1|Mar 21 H+1|Ven 21 H+1|Lun 21 H+1|Mer 21 H+1|Sam 21 |Lun 21 |
Jeu 22 |Dim 22 |Dim 22 |Mer 22 H+1|Ven 22 H+1|Lun 22 H+1|Mer 22 H+1|Sam 22 H+1|Mar 22 H+1|Jeu 22 H+1|Dim 22 |Mar 22 |
Ven 23 |Lun 23 |Lun 23 |Jeu 23 H+1|Sam 23 H+1|Mar 23 H+1|Jeu 23 H+1|Dim 23 H+1|Mer 23 H+1|Ven 23 H+1|Lun 23 |Mer 23 |
Sam 24 |Mar 24 |Mar 24 |Ven 24 H+1|Dim 24 H+1|Mer 24 H+1|Ven 24 H+1|Lun 24 H+1|Jeu 24 H+1|Sam 24 H+1|Mar 24 |Jeu 24 |
Dim 25 |Mer 25 |Mer 25 |Sam 25 H+1|Lun 25 H+1|Jeu 25 H+1|Sam 25 H+1|Mar 25 H+1|Ven 25 H+1|Dim 25 |Mer 25 |Ven 25 |
Lun 26 |Jeu 26 |Jeu 26 |Dim 26 H+1|Mar 26 H+1|Ven 26 H+1|Dim 26 H+1|Mer 26 H+1|Sam 26 H+1|Lun 26 |Jeu 26 |Sam 26 |
Mar 27 |Ven 27 |Ven 27 |Lun 27 H+1|Mer 27 H+1|Sam 27 H+1|Lun 27 H+1|Jeu 27 H+1|Dim 27 H+1|Mar 27 |Ven 27 |Dim 27 |
Mer 28 |Sam 28 |Sam 28 |Mar 28 H+1|Jeu 28 H+1|Dim 28 H+1|Mar 28 H+1|Ven 28 H+1|Lun 28 H+1|Mer 28 |Sam 28 |Lun 28 |
Jeu 29 | |Dim 29 H+1|Mer 29 H+1|Ven 29 H+1|Lun 29 H+1|Mer 29 H+1|Sam 29 H+1|Mar 29 H+1|Jeu 29 |Dim 29 |Mar 29 |
Ven 30 | |Lun 30 H+1|Jeu 30 H+1|Sam 30 H+1|Mar 30 H+1|Jeu 30 H+1|Dim 30 H+1|Mer 30 H+1|Ven 30 |Lun 30 |Mer 30 |
Sam 31 | |Mar 31 H+1| |Dim 31 H+1| |Ven 31 H+1|Lun 31 H+1| |Sam 31 | |Jeu 31 |
On sait que le changement intervient le dernier dimanche de Mars et d'Octobre , mais au lieu de mémoriser un bit de changement , je défini l'heure en fonction de la date .
L'astuce réside sur le fait qu'en mettant en opposition le jour et le jour de la semaine , on obtient une date fixe .
Jour - Jsem = DD (Dimanche dernier)
Jour - Jsem + 7 = DP (Dimanche prochain)
Avec Dim=0 , Lun=1 , etc... pour l'indexation .
Ainsi on sait si il reste encore un dimanche ou pas .
La fonction de test est la suivante :
Code : Tout sélectionner
Ete = 3<mois<10 or\
mois==3 and (jour-jsem+7)>31 or\
mois==10 and (jour-jsem)<25
Reste qu'il faut être sûr du jour de la semaine , que j'ai aussi calculé à partir de la date , mais c'est un autre problème , avec les année bissextiles et la date initiale , qu'il est difficile de calculer depuis 01/01/1970 (heure par défaut de certains systèmes quand ils perdent l'heure) . Je préfère calculer depuis 01/01/0001 ou juste après une année bissextile proche (tous les 400 ans) au 01/01/2001 qui tombe un Lundi .
C'est surtout utile pour les systèmes qui n'ont qu'une horloge RTC et pas de connexion internet ou autre moyen de synchronisation de l'heure , durant ces changements 2 fois dans l'année .