issue163:python
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
issue163:python [2020/11/30 08:18] – d52fr | issue163:python [2020/12/01 17:42] (Version actuelle) – andre_domenech | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
Python has a tremendous built-in series of libraries that deal with date and time. Often, we, as programmers, | Python has a tremendous built-in series of libraries that deal with date and time. Often, we, as programmers, | ||
- | En janvier 1969, un groupe de rock américain, Chicago (alors appelé Chicago Transit Authority), a posé la question musicale suivante : « Quelqu' | + | En janvier 1969, un groupe de rock américain, Chicago (alors appelé Chicago Transit Authority), a posé la question musicale suivante : « Quelqu' |
Python possède une formidable série de bibliothèques intégrées qui traitent de la date et de l' | Python possède une formidable série de bibliothèques intégrées qui traitent de la date et de l' | ||
Ligne 17: | Ligne 17: | ||
>>> | >>> | ||
2020-10-23 10: | 2020-10-23 10: | ||
+ | |||
+ | Lancez votre interpréteur Python dans un terminal et commençons. | ||
+ | |||
+ | Souvent, nous utilisons simplement les bibliothèques de date et d' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 2020-10-23 10: | ||
+ | >>> | ||
+ | 2020-10-23 10: | ||
**Which is nice and easy. You can easily assign the date and time to a variable and break it out into single values… | **Which is nice and easy. You can easily assign the date and time to a variable and break it out into single values… | ||
Ligne 28: | Ligne 39: | ||
2020 | 2020 | ||
>>> | >>> | ||
+ | |||
+ | Ce qui est bien et facile. Vous pouvez facilement assigner l' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 10 | ||
+ | >>> | ||
+ | 23 | ||
+ | >>> | ||
+ | 2020 | ||
+ | >>> | ||
**You can easily print this information in “human” readable formats using the strftime function… | **You can easily print this information in “human” readable formats using the strftime function… | ||
Ligne 37: | Ligne 59: | ||
>>> | >>> | ||
10:51:55** | 10:51:55** | ||
+ | |||
+ | Vous pouvez facilement imprimer cette information dans des formats « lisibles par un humain » en utilisant la fonction strftime… | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 10/23/2020 | ||
+ | >>> | ||
+ | >>> | ||
+ | 10:51:55 | ||
**But we all know that; we’ve done it many many times before. Why even bother? Beyond getting time and date into a program, what good is it? | **But we all know that; we’ve done it many many times before. Why even bother? Beyond getting time and date into a program, what good is it? | ||
Ligne 50: | Ligne 81: | ||
>>> | >>> | ||
2020-11-27 03: | 2020-11-27 03: | ||
+ | |||
+ | Mais nous le savons tous ; nous l' | ||
+ | |||
+ | Il est très facile de traiter les objets date-heure lorsqu' | ||
+ | |||
+ | Disons que nous avons émis une facture aujourd' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 2020-10-28 03: | ||
+ | >>> | ||
+ | >>> | ||
+ | 2020-11-27 03: | ||
**When we deal with databases, we often need to put a time or date into the database as a “timestamp” to show when something happened. That’s super easy. | **When we deal with databases, we often need to put a time or date into the database as a “timestamp” to show when something happened. That’s super easy. | ||
Ligne 60: | Ligne 104: | ||
Anyway, back to the subject at hand.** | Anyway, back to the subject at hand.** | ||
+ | |||
+ | Lorsque nous traitons avec des bases de données, nous devons souvent mettre une heure ou une date dans la base de données comme « horodatage » pour montrer quand quelque chose s'est passé. C'est très facile. | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 1603875671.3662472 | ||
+ | |||
+ | Vous pensez peut-être que cela ne ressemble pas à une heure, à une date ou à quelque chose de semblable. Mais c'est le cas. Il s'agit d'un horodatage UNIX. C'est en fait le nombre de secondes depuis le 1er janvier 1970 UTC. D' | ||
+ | |||
+ | Quoi qu'il en soit, revenons au sujet initial. | ||
**Accounting | **Accounting | ||
Ligne 66: | Ligne 120: | ||
While that looks fairly simple we do have some constraints on how we have to do the calculations. First, we need to convert the start time and end time to values.** | While that looks fairly simple we do have some constraints on how we have to do the calculations. First, we need to convert the start time and end time to values.** | ||
+ | |||
+ | Comptabilité | ||
+ | |||
+ | L'un des aspects merveilleux des possibilités de manipulation de la date et de l' | ||
+ | |||
+ | Bien que cela semble assez simple, nous avons quelques contraintes sur la façon dont nous devons faire les calculs. Tout d' | ||
**We take the start time and end time and convert them to datetime objects. | **We take the start time and end time and convert them to datetime objects. | ||
Ligne 79: | Ligne 139: | ||
>>> | >>> | ||
>>> | >>> | ||
+ | |||
+ | Nous prenons la date de début et la date de fin et les convertissons en objet d' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | Start time: 30.10.2020 08:00 - End Time: 30.10.2020 11:27 | ||
+ | |||
+ | À ce stade, les variables starttime et endtime sont toujours des chaînes. Pour les convertir en objets d' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
**We can verify that it worked by printing the type that Python sees one of the variables. | **We can verify that it worked by printing the type that Python sees one of the variables. | ||
Ligne 92: | Ligne 165: | ||
>>> | >>> | ||
3:27:00** | 3:27:00** | ||
+ | |||
+ | Nous pouvons vérifier que ça a marché en imprimant le type dans lequel Python voit l'une de ces variables. | ||
+ | |||
+ | >>> | ||
+ | <class ' | ||
+ | |||
+ | Ensuite, nous soustrayons simplement l' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | <class ' | ||
+ | >>> | ||
+ | 3:27:00 | ||
**Now, here is the stumbling block. You would think that since we have a value that looks like Hours: | **Now, here is the stumbling block. You would think that since we have a value that looks like Hours: | ||
Ligne 103: | Ligne 189: | ||
File "< | File "< | ||
AttributeError: | AttributeError: | ||
+ | |||
+ | Voici maintenant la pierre d' | ||
+ | |||
+ | Hours = totaltime.hours | ||
+ | |||
+ | Mais, je vous dirai tout de suite que ça ne marche pas. Si vous l' | ||
+ | |||
+ | >>> | ||
+ | Traceback (most recent call last): | ||
+ | File "< | ||
+ | AttributeError: | ||
**Well, that’s no help. The timedelta object type only has 3 attributes that can be used. They are | **Well, that’s no help. The timedelta object type only has 3 attributes that can be used. They are | ||
Ligne 120: | Ligne 217: | ||
>>> | >>> | ||
0** | 0** | ||
+ | |||
+ | Bon, ça ne nous aide pas. L' | ||
+ | • days # jours | ||
+ | • seconds # secondes | ||
+ | • microseconds # microsecondes | ||
+ | |||
+ | Regardons ces trois valeurs : | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 0 | ||
+ | >>> | ||
+ | 12420 | ||
+ | >>> | ||
+ | 0 | ||
**We know that totaltime is 3 hours and 27 minutes, but we bill only whole hours, rounded up, so we should bill the customer 4 hours. | **We know that totaltime is 3 hours and 27 minutes, but we bill only whole hours, rounded up, so we should bill the customer 4 hours. | ||
Ligne 133: | Ligne 247: | ||
>>> | >>> | ||
27** | 27** | ||
+ | |||
+ | Nous savons que le temps total est de 3 heures et 27 minutes, mais nous ne facturons que des heures entières, arrondies, donc nous devrions facturer 4 heures au client. Comment ferons-nous ? Nous utilisons la méthode divmod. Elle prend deux nombres (le numérateur et le dénominateur) et retourne le quotient et le reste. | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 207 | ||
+ | >>> | ||
+ | 0 | ||
+ | >>> | ||
+ | >>> | ||
+ | 3 | ||
+ | >>> | ||
+ | 27 | ||
**Then we simply use a simple if statement: | **Then we simply use a simple if statement: | ||
Ligne 150: | Ligne 277: | ||
So we can bill the client for £60 . That wasn’t as hard as expected.** | So we can bill the client for £60 . That wasn’t as hard as expected.** | ||
+ | |||
+ | Ensuite, il suffit d' | ||
+ | |||
+ | >>> | ||
+ | ... hour += 1 | ||
+ | ... | ||
+ | >>> | ||
+ | 4 | ||
+ | |||
+ | Il s'agit maintenant de multiplier le nombre d' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 60 | ||
+ | |||
+ | Ainsi, nous pourrons facturer 60 € au client. Ce n'est pas aussi dur qu' | ||
**Time Zones | **Time Zones | ||
Ligne 156: | Ligne 300: | ||
My friend Halvard lives in Norway and his time is somewhere around 7 hours ahead of mine. My friend Bruce, lives in Colorado and that is 1 hour behind my time.** | My friend Halvard lives in Norway and his time is somewhere around 7 hours ahead of mine. My friend Bruce, lives in Colorado and that is 1 hour behind my time.** | ||
+ | |||
+ | Fuseaux horaires | ||
+ | |||
+ | Je vais être brutalement honnête. Les fuseaux horaires me font mal au cerveau. VRAIMENT ! Parfois, lorsque je communique avec notre merveilleux rédacteur en chef, Ronnie, je me souviens qu'il vit en Écosse et qu'il est quelque part en avance d' | ||
+ | |||
+ | Mon ami Halvard vit en Norvège et son heure est en avance de 7 heures sur la mienne. Mon ami Bruce, qui vit dans le Colorado, a une heure de retard sur moi. | ||
**When I was growing up (yes, back in the days where rainbows were in black and white, and we had to watch TV by candlelight because there was no electricity), | **When I was growing up (yes, back in the days where rainbows were in black and white, and we had to watch TV by candlelight because there was no electricity), | ||
Ligne 162: | Ligne 312: | ||
pip install pytz** | pip install pytz** | ||
+ | |||
+ | Quand j' | ||
+ | |||
+ | La bibliothèque date/heure en Python ne gère pas vraiment les fuseaux horaires de façon native, mais il existe un paquet tiers que vous pouvez installer via pip. Il s' | ||
+ | |||
+ | pip install pytz | ||
**So how do we use pytz? It’s fairly easy. Let’s take a look. | **So how do we use pytz? It’s fairly easy. Let’s take a look. | ||
Ligne 177: | Ligne 333: | ||
>>> | >>> | ||
2020-10-05 12:00:00** | 2020-10-05 12:00:00** | ||
+ | |||
+ | Alors, comment utiliser pytz? C'est assez facile. Jetons-y un œil. | ||
+ | |||
+ | Nous faciliterons les choses en modifiant la déclaration d' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | |||
+ | Maintenant, nous ne sommes pas obligés d' | ||
+ | |||
+ | Ici, nous obtenons l' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 2020-10-05 12:00:00 | ||
**Next, we’ll get a datetime object that is timezone aware: | **Next, we’ll get a datetime object that is timezone aware: | ||
Ligne 191: | Ligne 362: | ||
Wait a second. Why would it say that my time is 5 hours behind UTC? That’s because of Daylight Saving Time. (October 10, 2020 was before the change over to Daylight Standard time).** | Wait a second. Why would it say that my time is 5 hours behind UTC? That’s because of Daylight Saving Time. (October 10, 2020 was before the change over to Daylight Standard time).** | ||
+ | |||
+ | Ensuite, nous obtiendrons un objet d' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 2020-10-05 12: | ||
+ | |||
+ | L' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 2020-10-05 12: | ||
+ | |||
+ | Attendez une seconde. Pourquoi dit-il que mon temps a 5 heures de retard sur UTC ? C'est à cause de l' | ||
**So, let’s do it again, this time using the .now() method… | **So, let’s do it again, this time using the .now() method… | ||
Ligne 202: | Ligne 387: | ||
Ahhh. That makes a bit more sense. So Ronnie is 6 hours ahead of me.** | Ahhh. That makes a bit more sense. So Ronnie is 6 hours ahead of me.** | ||
+ | |||
+ | Refaisons-le maintenant, mais, cette fois, en utilisant la méthode .now() : | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 2020-11-05 05: | ||
+ | >>> | ||
+ | >>> | ||
+ | 2020-11-05 05: | ||
+ | |||
+ | Ahhh ! C'est un peu plus compréhensible. Donc, Ronnie est en avance de 6 heures sur moi. | ||
**So, the musical question of the month, “Does anybody really know what time it is?” actually does seem to have a bit more relevance than it did when the article started, doesn’t it? I’ll leave you with that question hanging in your mind, and, hopefully, I didn’t plant the song into your mind so that it keeps running again and again. | **So, the musical question of the month, “Does anybody really know what time it is?” actually does seem to have a bit more relevance than it did when the article started, doesn’t it? I’ll leave you with that question hanging in your mind, and, hopefully, I didn’t plant the song into your mind so that it keeps running again and again. | ||
As always, until next time; stay safe, healthy, positive and creative!** | As always, until next time; stay safe, healthy, positive and creative!** | ||
+ | |||
+ | Ainsi, la question musicale du mois, « Quelqu' | ||
+ | |||
+ | Comme toujours, jusqu' | ||
issue163/python.1606720717.txt.gz · Dernière modification : 2020/11/30 08:18 de d52fr