- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
Simon
15 mars 2024 - 15 mars 2024 à 17:17
checkConversation résolue
4 réponses
Besoin d'importer le module tzdate
Je suis sous Windows 11, avec une installation de Python 3.12.1. J'ai voulu tester ce que Thibault montre dans la vidéo, mais aucune spécification de zone n'était reconnue (par exemple …
00:00:00 :Dans cette partie on va voir quelque chose de très important avec les dates, c'est la gestion desfuseaux horaires. Donc la gestion des fuseaux horaires est possible de différentes façons et
00:00:08 :notamment depuis la version 3.9 de Python qui a vu l'ajout d'un nouveau module qui s'appellezone info comme ceci. Donc avant on devait passer par des librairies externes, maintenant on a ça
00:00:19 :qui est inclus dans Python 3.9. Vous allez voir que les principes restent les mêmes, on va créerdes fuseaux horaires et les ajouter à nos dates. Donc si vous utilisez une version antérieure à
00:00:27 :la version 3.9, il y a d'autres bibliothèques comme par exemple PyTZ comme ceci qui vous permettentde faire sensiblement la même chose avec une syntaxe juste un petit peu différente au niveaudes méthodes et des fonctions que vous allez utiliser. Mais le principe reste le même. Les
00:00:41 :différents modules qu'on va voir dans cette partie, ils utilisent une base de données qu'on appellela TZ database, vous la retrouverez également sous le nom IANA. C'est une base de données
00:00:50 :universelle qui permet de représenter les différents fuseaux horaires dans le monde,vous voyez qu'il y en a beaucoup et généralement on a donc un format avec déjà le continent etensuite un endroit, donc généralement c'est des villes. Donc par exemple si on veut des fuseaux
00:01:03 :horaires aux Etats-Unis, alors c'est pas forcément les Etats-Unis, vous voyez c'est America donc c'estvraiment le continent américain. Par exemple ici on va avoir Halifax qui en fait est au Canada,
00:01:12 :là vous retrouvez ici le code du pays donc quand on a US c'est aux Etats-Unis, MX c'est Mexiquej'imagine, CA Canada. Donc vous voyez c'est vraiment par continent, si on va par exemple un
00:01:22 :peu plus bas on va retrouver donc là l'Asie, ensuite on va avoir l'Europe. Donc si on veut parexemple le fuseau horaire en France, en France on a un seul fuseau horaire à part si on pense auDomtum bien sûr là on va avoir d'autres fuseaux horaires mais en France métropolitaine on a un
00:01:35 :seul fuseau horaire mais on va pouvoir le représenter de différentes façons. Par exemple donc si j'essaiede trouver la France on va avoir Paris mais on peut avoir d'autres villes aussi. Donc j'essaie
00:01:43 :de trouver Paris, je vais faire une recherche pour aller un peu plus vite. Donc voilà Europe, Paris,vous voyez qu'on a d'autres villes, on a Rome et on doit avoir d'autres villes en France j'imagine,je vais chercher avec FR et ce n'est même pas sûr vous voyez peut-être qu'en fait en France
00:01:57 :il y a juste ce fuseau horaire. En tout cas on peut avoir différents fuseaux horaires qui vontpointer vers la même heure. Là vous voyez ici si on regarde les colonnes ici à droite on a la
00:02:06 :différence avec le fuseau UTC et vous voyez que pour certains c'est la même différence on va avoirplus une heure par exemple ou plus trois heures. Donc qu'est ce que c'est UTC ? C'est ce qu'on
00:02:15 :appelle le temps universel coordonné, vous en avez déjà probablement entendu parler. On faitpar ailleurs souvent la confusion entre UTC et un fuseau horaire, alors attention si on veut êtreprécis UTC c'est pas un fuseau horaire c'est juste une échelle de temps qui a été acceptée par lagrande majorité des pays comme l'échelle de temps universelle. Donc UTC ce n'est pas un fuseau horaire
00:02:34 :en soi c'est juste une échelle de temps sur laquelle on s'est accordé et ensuite tous lesfuseaux horaires vont se référer à UTC avec un offset. Donc vous voyez ici UTC offset et on va
00:02:44 :également avoir ici UTC DST offset. Alors DST qu'est ce que c'est ? C'est Daylight Saving Time doncen fait c'est l'heure d'été tout simplement et donc ça peut varier en fonction de l'heure d'été oul'heure d'hiver. On peut avoir un offset qui est plus ou moins important puisque dans beaucoup de
00:02:59 :pays quand on passe à l'heure d'été on va perdre ou gagner une heure en fonction des pays. Doncc'est pour ça que les fuses horaires ça peut poser beaucoup de problèmes. Donc je vais revenir dans
00:03:07 :mon éditeur Python et on va voir un petit peu tout ça en détail. Alors déjà ce qu'il faut savoirc'est qu'on peut avoir deux types d'objets Daytime, on a les objets qui sont dit naïfs et les objetsqui sont dit aware. Donc naïf en fait c'est une date qui n'a aucune information de fuseau horaire.
00:03:21 :A l'inverse une date qui est aware c'est une date qui est définie selon un fuseau horaire précis. Doncpar exemple si on crée un objet Daytime, donc je vais réimporter depuis le module Daytime maclasse Daytime. Si on fait donc un objet Daytime.now vous pouvez afficher les informations de fuseau
00:03:39 :horaire avec l'attribut tz info. Donc tz c'est un raccourci pour timezone qui signifie fuseauhoraire en anglais. Et donc là si j'affiche cette information vous voyez que ça ne me retourne rien,
00:03:49 :je peux faire un print pour que je vois explicitement non. Donc comme je n'ai rien qui estretourné, j'ai non qui est retourné, ça veut dire qu'on n'a pas d'informations de fuseau horaire. Donc
00:03:57 :là on a une date qui est tout simplement ce qu'on appelle naïve qui n'a pas ces informations. Alorsil y a différentes façons d'ajouter des informations de fuseau horaire à un objet en fonction desversions de Python que vous utilisez comme je vous avais dit. Donc depuis la version 3.9 on peut
00:04:11 :utiliser le module de la bibliothèque standard qui s'appelle zone-info et qui permet de gérer lesfuseaux horaires. Donc grâce à la classe zone-info, je vais l'importer. Donc depuis le module zone-info
00:04:20 :on a la classe zone-info comme ceci, avec cette fois-ci les majuscules sur le Z et sur le I. Jevais pouvoir créer un fuseau horaire à partir des informations de cette fameuse base de donnéesici. Donc qu'est ce que je vais lui donner ? Je vais lui donner en chaîne de caractère le nom du
00:04:34 :fuseau horaire que je souhaite créer. Donc par exemple je peux récupérer le fuseau horaire deVancouver. Donc je vais faire une variable que je vais appeler now in Vancouver qui va être égale
00:04:43 :à daytime.now. Et là on va passer en argument au paramètre tz un objet zone-info avec donc le nomde cette base de données donc america slash vancouver. Donc je vais juste réduire un petit
00:04:55 :peu pour qu'on voit tout sur la même ligne. Donc je valide. Là on va avoir donc now in vancouveret vous voyez que là on a 15h38 le 24 octobre. Au moment où j'enregistre cette vidéo, moi je
00:05:06 :suis à montréal donc je vais faire une autre date qui va être now in montréal qui va êtreégale à daytime.now. Et là on va lui donner le zone-info de cette fois-ci américa et montréal.
00:05:17 :Et là si j'affiche now in montréal vous allez voir qu'on retrouve bien les trois ordres dedécalage entre montréal et vancouver. Donc là il est bien 18h38 là où je suis à montréal et il
00:05:28 :est 15h38 à vancouver. Donc là on se retrouve avec deux objets qui sont dits aware et ça avraiment une importance puisque on ne peut pas faire de comparaison ou d'opération comme dessoustractions entre deux objets de daytime qui ne sont pas tous les deux aware. Donc par exemple
00:05:42 :si je refais une variable now in montréal mais que je ne lui donne pas spécifiquement deux fuséeshoraires. Donc là comme je me trouve à montréal en ce moment, alors il ne faut pas l'appeler je
00:05:51 :veux juste l'afficher, comme je me trouve à montréal en ce moment et bien il va se basersur l'heure de mon ordi et il va bien mettre la bonne heure donc 18h39 à l'heure où j'enregistrecette formation. Par contre là je n'ai pas spécifié moi deux fusées horaires donc si je fais
00:06:05 :now in montréal.tzinfo là on n'a rien, on n'a pas d'informations de fusées horaires, on a doncune date qui est naïve. Et si j'essaie de faire des comparaisons, de faire par exemple now in
00:06:15 :vancouver plus grand que now in montréal, donc on peut comparer des objets de daytime seulements'ils sont les deux aware. Là il y en a un qui est aware, le vancouver, et montréal ne l'est pas.
00:06:27 :Si j'essaie de valider, vous voyez qu'on a cette erreur qui est assez explicite qui me dit qu'il nepeut pas comparer un objet naïf avec un objet aware. Donc il faut bien faire attention à ça.
00:06:37 :Si vous voulez par la suite rajouter ou modifier un fusée horaire à un objet daytime, vous pouvezle faire. Par exemple si je veux récupérer le temps qu'il est à paris à partir de ma variable
00:06:48 :now in vancouver, je peux utiliser la méthode as timezone et lui passer là encore un objet zoneinfo. Donc cette fois-ci je vais lui passer le timezone de paris et donc là ce qu'on va faire
00:06:59 :c'est tout simplement changer le fusée horaire de ma date. Donc si j'affiche now in paris,là on va retrouver minuit 38 et donc c'est logique puisque il est 6h à montréal, donc on rajoute 6hpour paris ça fait minuit 38 et à vancouver il était 15h. Donc on a converti notre date de
00:07:16 :vancouver où on était le 24 octobre, on a converti ça dans la zone horaire où on était le 24 octobreà 15h38, on a converti ça donc on a changé le fusée horaire pour lui dire que maintenant ilse trouvait à paris et effectivement on est maintenant le 25 octobre à minuit 38. Donc
00:07:32 :voilà pour les fusées horaires, voilà comment on peut créer des fusées horaires avec la classezone info qui est disponible maintenant à partir de python 3.9 et comment on peut donc faire des
00:07:43 :dates qui sont aware et qui ont ces informations de fusée horaire et qui nous permettent ensuitede les comparer les unes avec les autres ou même de les modifier en changeant le fusée horaire.
00:07:52 :Donc gardez bien ça en tête, les dates peuvent être naïves ou aware, par défaut si on n'indiquepas de fusée horaire elles vont être naïves et on a vu donc dans cette partie comment on pouvaitvérifier si une date avait un fusée horaire avec l'attribut tz info et également ajouter ou modifier
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.