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 19:03] d52frissue203:python [2024/04/03 16:58] (Version actuelle) andre_domenech
Ligne 7: Ligne 7:
 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.**
  
-Amusement et jeux avec les dates+Jeux et amusements avec les dates
  
-Salutations, chers amis. J'espère que l'année se passe bien pour vous jusqu'à présent.+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 « Amusement et jeux avec les dates ». En réalité, il s'agit plutôt de « Douleur, souffrance et angoisse avec les rendez-vous ». Mais comme la vieille blague de papa « Pourquoi McDonalds les appelle-t-il 'Happy Meals' ? Parce que s'ils les appelaient 'Sad Meals', personne ne les achèterait ! », je me suis dit que si je l'intitulais « Mon horrible expérience des rendez-vous », 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.+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), c'est le passage à 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.+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.
  
  
Ligne 38: Ligne 38:
 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#) 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 repoussé les choses dans la file d'attente « à écrire » et je me suis assis pour commencer à creuser en recherchant et testant du code.+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 respecter le protocole de programmation, j'ai dû définir le problème et exposer les étapes à suivre pour mener à bien la tâche.
Ligne 46: Ligne 46:
 SI nous sommes la veille d'un changement d'heure, alors... SI nous sommes la veille d'un changement d'heure, alors...
  SI le changement ajoute une heure, alors...  SI le changement ajoute une heure, alors...
- Avant d'aller au lit, avancer l'horloge d'une heure. +     Avant d'aller au lit, avancer l'horloge d'une heure. 
- SI le changement soustrait une heure, alors... + OU SI le changement soustrait une heure, alors... 
- Avant d'aller au lit, reculez l'horloge d'une heure. +     Avant d'aller au lit, reculez l'horloge d'une heure. 
- ELSE SI le changement ajoute 30 minutes, alors... + OU SI le changement ajoute 30 minutes, alors... 
- Avant de vous coucher, avancez l'horloge de 30 minutes. +     Avant de vous coucher, avancez l'horloge de 30 minutes. 
- ELSE SI le changement entraîne une soustraction de 30 minutes, alors... + OU SI le changement entraîne une soustraction de 30 minutes, alors... 
- Avant d'aller au lit, reculez l'horloge de 30 minutes. +     Avant d'aller au lit, reculez l'horloge de 30 minutes. 
- ELSE  + OU  
-Débarrassez-vous de toutes les horloges analogiques de la maison et laissez les ordinateurs s'en charger !+     Débarrassez-vous de toutes les horloges analogiques de la maison et laissez les ordinateurs s'en charger !
  
  
Ligne 69: Ligne 69:
 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 ELSE est peut-être un peu radicale, mais bon. Qu'est-ce que je peux dire ? ET OUI, il y a une zone dans le monde qui ne change l'heure que de 30 minutes.+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. 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.
Ligne 77: Ligne 77:
 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). 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, c'est plus facile, car nous n'avons pas besoin d'ajouter les 7 jours (en bas à droite).+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). 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 98: Ligne 98:
 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 notre ligne unique, nous pouvons l'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).+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. 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.
Ligne 108: Ligne 108:
 dstStart = datetime.date(year, 3, 1) + relativedelta(day=31, weekday=SU(-1)) 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 voudrons 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.+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)) 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)...+En modifiant le programme ci-dessus, le code serait donc (en bas à droite).
  
  
Ligne 125: Ligne 125:
 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 les choses afin d'obtenir les dates des changements d'heure pour votre pays.+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 . 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 This Micro That dans le magazine Full Circle de ce mois-ci.+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. J'ai placé le code des deux exemples de programmes sur mon dépôt github à l'adresse https://github.com/gregwa1953/FCM-203.
Ligne 138: Ligne 138:
 **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 ..** **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 dasn notre cas est le 1er mars 2024 et elle doit être du type datetime.date+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// //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.** **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, nous devons ajouter 7 jours.+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)”.** **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 « (day+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) ».
  
  
Ligne 160: Ligne 160:
 **And the output would be…** **And the output would be…**
  
-Et la sortie serait...+Et la sortie serait :
  
 **And the output is…** **And the output is…**
-Et la sortie est...+Et la sortie est :
  
  
issue203/python.1712077418.txt.gz · Dernière modification : 2024/04/02 19:03 de d52fr