Outils pour utilisateurs

Outils du site


issue203:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue203:python [2024/04/02 07:54] d52frissue203:python [2024/04/03 16:58] (Version actuelle) andre_domenech
Ligne 6: Ligne 6:
  
 This article started with an idea for my Micro This Micro That article series. This weekend (as I’m writing this) is the switch to Daylight Saving Time here in most of the U.S. and I was thinking about a Microcontroller program that needs to keep track of the actual time and date, making sure that, after a power failure or reboot of the device, the device goes up to the internet, gets the current time and date. Then what happens when Daylight Saving time hits? Here in the U.S. we change to Daylight Saving on the Second Sunday of March at 02:00 and change back to “Standard” time the first Sunday in November at 02:00. Never having lived in any other part of the world, and time change has not been a major conversation topic between my international friends and myself, I wondered if the rest of the world had this issue. With a little digging on the Internet, I found out.** This article started with an idea for my Micro This Micro That article series. This weekend (as I’m writing this) is the switch to Daylight Saving Time here in most of the U.S. and I was thinking about a Microcontroller program that needs to keep track of the actual time and date, making sure that, after a power failure or reboot of the device, the device goes up to the internet, gets the current time and date. Then what happens when Daylight Saving time hits? Here in the U.S. we change to Daylight Saving on the Second Sunday of March at 02:00 and change back to “Standard” time the first Sunday in November at 02:00. Never having lived in any other part of the world, and time change has not been a major conversation topic between my international friends and myself, I wondered if the rest of the world had this issue. With a little digging on the Internet, I found out.**
 +
 +Jeux et amusements avec les dates
 +
 +Salutations, chers amis. J'espère que l'année se passe bien pour vous.
 +
 +Je suppose que je devrais vraiment commencer l'article de ce mois en expliquant le titre. Je n'ai pas vraiment voulu intituler mon article « Jeux et amusements avec les dates ». En réalité, il s'agit plutôt de « Douleur, souffrance et angoisse avec les dates ». Mais comme la vieille blague « Pourquoi McDonalds les appelle-t-il des 'Happy Meals' ? Parce que s'ils les appelaient 'Sad Meals', personne ne les achèterait ! », je me suis dit que si j'intitulais l'article « Mes horribles expériences avec les dates », soit vous ne voudriez pas le lire, soit vous supposeriez que je parle d'une expérience où j'ai essayé de sortir avec quelqu'un.
 +
 +Cet article est parti d'une idée pour ma série d'articles Micro-ci Micro-là. Ce week-end (au moment où j'écris ces lignes), nous passons à l'heure d'été dans la plupart des États-Unis et je pensais à un programme de microcontrôleur qui doit garder la trace de l'heure et de la date réelles, en s'assurant que, après une panne de courant ou un redémarrage de l'appareil, celui-ci se connecte à Internet et obtient l'heure et la date actuelles. Que se passe-t-il ensuite lorsque l'heure d'été arrive ? Ici, aux États-Unis, nous passons à l'heure d'été le deuxième dimanche de mars à 02h00 et revenons à l'heure « normale » le premier dimanche de novembre à 02h00. N'ayant jamais vécu dans une autre partie du monde et le changement d'heure n'étant pas un sujet de conversation majeur entre mes amis internationaux et moi-même, je me suis demandé si le reste du monde était confronté à ce problème. En fouillant un peu sur Internet, j'ai trouvé la réponse.
 +
  
 **Some areas of the world change to Daylight Saving on the Second Sunday in March at 02:00, some on the Second Sunday in March at 00:00, some on the last Sunday in March at 01:00 UTC, some on the Last Sunday in March at 02:00, some on the Friday before the last Sunday in March, some on the last Friday in April at 00:00, some on the first Sunday in October at 00:00, and others at even more difficult times to remember, unless you live there. And the switch back to "regular" time can even be more convoluted. (https://en.wikipedia.org/wiki/Daylight_saving_time_by_country#) **Some areas of the world change to Daylight Saving on the Second Sunday in March at 02:00, some on the Second Sunday in March at 00:00, some on the last Sunday in March at 01:00 UTC, some on the Last Sunday in March at 02:00, some on the Friday before the last Sunday in March, some on the last Friday in April at 00:00, some on the first Sunday in October at 00:00, and others at even more difficult times to remember, unless you live there. And the switch back to "regular" time can even be more convoluted. (https://en.wikipedia.org/wiki/Daylight_saving_time_by_country#)
Ligne 26: Ligne 35:
     ELSE      ELSE 
         Get rid of all the analogue clocks in the house and let the computers handle things!**         Get rid of all the analogue clocks in the house and let the computers handle things!**
 +        
 +Certaines régions du monde passent à l'heure d'été le deuxième dimanche de mars à 02h00, d'autres le deuxième dimanche de mars à 00h00, d'autres le dernier dimanche de mars à 01h00 UTC, d'autres le dernier dimanche de mars à 02h00, d'autres le vendredi précédant le dernier dimanche de mars, d'autres le dernier vendredi d'avril à 00h00, d'autres le premier dimanche d'octobre à 00h00, et d'autres encore à des moments encore plus difficiles à mémoriser, à moins d'y habiter. Et le retour à l'heure « normale » peut être encore plus compliqué. (https://en.wikipedia.org/wiki/Daylight_saving_time_by_country#)
 +
 +Sachant cela, j'ai réorganisé la file d'attente « à écrire » et je me suis assis pour commencer à creuser en recherchant et testant du code.
 +
 +Pour respecter le protocole de programmation, j'ai dû définir le problème et exposer les étapes à suivre pour mener à bien la tâche.
 +
 +Pour ceux d'entre nous qui s'identifient aux « humains » (par opposition aux formes de vie informatiques basées sur le silicium), la tâche est facile.
 +
 +SI nous sommes la veille d'un changement d'heure, alors...
 + SI le changement ajoute une heure, alors...
 +     Avant d'aller au lit, avancer l'horloge d'une heure.
 + OU SI le changement soustrait une heure, alors...
 +     Avant d'aller au lit, reculez l'horloge d'une heure.
 + OU SI le changement ajoute 30 minutes, alors...
 +     Avant de vous coucher, avancez l'horloge de 30 minutes.
 + OU SI le changement entraîne une soustraction de 30 minutes, alors...
 +     Avant d'aller au lit, reculez l'horloge de 30 minutes.
 + OU 
 +     Débarrassez-vous de toutes les horloges analogiques de la maison et laissez les ordinateurs s'en charger !
 +
  
 **Ok. MAYBE I over simplified the situation and the ending ELSE task MIGHT be a bit drastic, but hey. What can I say? AND YES, there is an area in the world that only changes the time by 30 minutes. **Ok. MAYBE I over simplified the situation and the ending ELSE task MIGHT be a bit drastic, but hey. What can I say? AND YES, there is an area in the world that only changes the time by 30 minutes.
Ligne 38: Ligne 68:
  
 I created two one-liners for all of the above steps. I simply added a year variable instead of “hardcoding” the year in the datetime.date call (below).** I created two one-liners for all of the above steps. I simply added a year variable instead of “hardcoding” the year in the datetime.date call (below).**
 +
 +D'accord. J'ai peut-être trop simplifié la situation et la fin de la tâche "OU" est peut-être un peu radicale, mais bon. Que dire ? Et OUI, il y a une zone dans le monde qui ne change l'heure que de 30 minutes.
 +
 +Quoi qu'il en soit, comment allons-nous coder cela ? Je ne vais pas vous ennuyer avec 10 pages de tentatives ratées (non pas qu'elles l'aient toutes été, mais aucune ne m'a satisfait). Je vais cependant partager la solution que j'ai trouvée et qui m'a plu.
 +
 +La clé de tout cela est l'utilisation d'une bibliothèque nommée dateutil. Elle est simple à installer avec pip. Pour vous guider dans le processus, j'utiliserai PtPython. Une fois la bibliothèque installée, nous pouvons l'importer ainsi que datetime (en haut à droite).
 +
 +Une fois que nous avons cela, nous voulons trouver le premier dimanche du mois. Puisque nous avons tout importé de dateutil.relativedelta, cela inclut le jour de la semaine et une abréviation de deux caractères pour les jours de la semaine. Dans notre cas, nous voulons « SU » pour Sunday (ci-dessous).
 +
 +Pendant que nous y sommes, obtenons la date de la fin de l'heure d'été (aux États-Unis) qui est le PREMIER dimanche de novembre 2024. Cette fois-ci, c'est plus facile, car nous n'avons pas besoin d'ajouter les 7 jours (en bas à droite).
 +
 +J'ai créé deux lignes simples pour toutes les étapes ci-dessus. J'ai simplement ajouté une variable year au lieu de coder en dur l'année dans l'appel datetime.date (ci-dessous).
  
  
Ligne 55: Ligne 97:
  
 So making the changes to the above program the code would be (bottom right)…** So making the changes to the above program the code would be (bottom right)…**
 +
 +Maintenant que nous avons défini nos deux lignes simples, nous pouvons les utiliser pour trouver les dates de début et de fin de l'heure d'été. Ainsi, pour les États-Unis, voici un programme rapide qui permet d'obtenir les dates de début et de fin pour les années 2024 à 2030 (page suivante, en haut à droite).
 +
 +C'est bien beau, mais je pense que l'on peut supposer qu'il y a beaucoup moins de lecteurs du FCM aux États-Unis qu'il n'y en a dans le reste du monde. Le deuxième groupe de pays le plus important (dont vous faites probablement partie, cher lecteur) commence son changement d'heure le dernier dimanche de mars à 00h00 UTC et le termine le dernier dimanche d'octobre à 01h00 UTC.
 +
 +Il est très simple de modifier le code pour gérer le dernier dimanche au lieu du deuxième dimanche.
 +
 +Nous pouvons donc utiliser un changement de syntaxe pour notre appel relativedelta.
 +
 +dstStart = datetime.date(year, 3, 1) + relativedelta(day=31, weekday=SU(-1))
 +
 +Dans ce cas, nous lui donnerons la même valeur datetime.date, mais nous voulons configurer le relativedelta pour qu'il commence ses calculs à partir du 31 du mois et trouve le dimanche le plus proche avec un modificateur « -1 », puisque nous revenons en arrière à partir du 31. Pour le dernier dimanche d'octobre, il suffit de passer de 3 pour le mois (dans datetime.date) à 10.
 +
 +dstEnd = datetime.date(year, 10, 1) + relativedelta(day=31, weekday=SU(-1))
 +
 +En modifiant le programme ci-dessus, le code serait donc (en bas à droite).
 +
  
 **So until someone gets things changed, this will do. For those of you who don’t fall into the first two groups, you should have enough information to change things to get the dates for the time changes for your country. **So until someone gets things changed, this will do. For those of you who don’t fall into the first two groups, you should have enough information to change things to get the dates for the time changes for your country.
Ligne 65: Ligne 124:
  
 Until next time, as always; stay safe, healthy, positive and creative!** Until next time, as always; stay safe, healthy, positive and creative!**
 +
 +Jusqu'à ce que quelqu'un fasse changer les choses, cela suffira. Pour ceux d'entre vous qui ne font pas partie des deux premiers groupes, vous devriez avoir suffisamment d'informations pour modifier le code afin d'obtenir les dates des changements d'heure pour votre pays.
 +
 +Si vous voulez en savoir plus sur le paquetage dateutil, la documentation se trouve à l'adresse https://dateutil.readthedocs.io/en/stable/index.html .
 +
 +Rappelez-vous que tout ceci a commencé parce que je voulais qu'un microcontrôleur sache quand le changement d'heure se produit réellement. Nous n'avons abordé que la partie date. La partie relative à l'heure n'est pas encore terminée. Elle sera présentée dans mon article Micro-ci micro-là dans le magazine Full Circle de ce mois-ci.
 +
 +J'ai placé le code des deux exemples de programmes sur mon dépôt github à l'adresse https://github.com/gregwa1953/FCM-203.
 +
 +Jusqu'à la prochaine fois, comme toujours, restez en sécurité, en bonne santé, positif et créatif !
 +
 +//lignes noires de l'encadré p 31, en haut à droite//
 +**Next, we need to get a start date, which in our case will be March 1, 2024, and it needs to be a type of ..**
 +
 +Ensuite, nous devons obtenir la date de début, qui dans notre cas est le 1er mars 2024 et elle doit être du type datetime.date
 +
 +//lignes noires de l'encadré p 31, en bas à gauche//
 +**So the first Sunday of March 2024 is the third. Now that we know that, we just need to add 7 days.**
 +
 +Ainsi, le premier dimanche de mars 2024 est le 3. Maintenant que nous le savons, il suffit d'ajouter 7 jours.
 +
 +
 +**So, the beginning (in the U.S.) of Daylight Saving time in 2024 is March 10. We could also have used the following line instead of “(days=+7)”.**
 +Ainsi, en 2024, l'heure d'été commence (aux États-Unis) le 10 mars. Nous aurions tout aussi bien pu utiliser la ligne suivante à la place de « (days=+7) ».
 +
 +
 +
 +**Which would return the same date. Just two ways of doing the same
 +thing.**
 +
 +Qui retourne la même date. Simplement, deux façons de faire la même chose.
 +
 +
 +//lignes noires des encadrés p 32, en haut à droite//
 +**And the output would be…**
 +
 +Et la sortie serait :
 +
 +**And the output is…**
 +Et la sortie est :
 +
  
issue203/python.1712037244.txt.gz · Dernière modification : 2024/04/02 07:54 de d52fr