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:35] – 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 18: | Ligne 18: | ||
| 2020-10-23 10: | 2020-10-23 10: | ||
| - | Allumez | + | Lancez |
| Souvent, nous utilisons simplement les bibliothèques de date et d' | Souvent, nous utilisons simplement les bibliothèques de date et d' | ||
| Ligne 40: | Ligne 40: | ||
| >>> | >>> | ||
| - | Ce qui est bien et facile. Vous pouvez facilement assigner l' | + | Ce qui est bien et facile. Vous pouvez facilement assigner l' |
| >>> | >>> | ||
| Ligne 105: | Ligne 105: | ||
| 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 un « horodatage » pour montrer quand quelque chose s'est passé. C'est très facile. | + | 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. |
| >>> | >>> | ||
| Ligne 111: | Ligne 111: | ||
| 1603875671.3662472 | 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' | + | 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 qui nous occupe. | + | Quoi qu'il en soit, revenons au sujet initial. |
| **Accounting | **Accounting | ||
| Ligne 123: | Ligne 123: | ||
| Comptabilité | Comptabilité | ||
| - | L'un des aspects merveilleux des possibilités de manipulation de la date et de l' | + | 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' | Bien que cela semble assez simple, nous avons quelques contraintes sur la façon dont nous devons faire les calculs. Tout d' | ||
| Ligne 147: | Ligne 147: | ||
| Start time: 30.10.2020 08:00 - End Time: 30.10.2020 11:27 | Start time: 30.10.2020 08:00 - End Time: 30.10.2020 11:27 | ||
| - | À ce niveau, les variables starttime et endtime sont toujours des chaînes. Pour les convertir en objets d' | + | À ce stade, les variables starttime et endtime sont toujours des chaînes. Pour les convertir en objets d' |
| >>> | >>> | ||
| Ligne 165: | 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 176: | 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 193: | 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 206: | 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 223: | 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 229: | 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 235: | 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 250: | 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 264: | 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 275: | 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.1606721741.txt.gz · Dernière modification : 2020/11/30 08:35 de d52fr
