Maintenant que je travaille presque entièrement à distance, je n'ai plus à passer du temps à me déplacer. C'est génial parce que je peux utiliser ce temps ailleurs, mais je crains d'avoir moins d'opportunités de bouger et de ne pas avoir le temps d'écouter le podcast. Pour les résoudre tous les deux, j'ai commencé à marcher jusqu'à un supermarché (ouverture à 8 heures!) Un peu loin tous les matins, mais j'ai entendu aujourd'hui un podcast appelé PythonBytes. Je parlais de quelques conseils de mes yeux, alors je voudrais les présenter.
Les gens qui parlaient sur le podcast ont également dit: «Eh bien, pouvez-vous faire ça?» «Je ne savais pas», mais j'ai été surpris d'entendre cela. Pour ceux qui veulent entendre directement, 27 de Episode # 190 C'est environ une minute.
timedelta
est une fonctionnalité incluse dans la bibliothèque standard de python et est incluse dans le module datetime
. Lorsque les «datetime» sont soustraits les uns des autres, des données de type «timedelta» sont renvoyées.
Appelez datetime.now ()
deux fois pour obtenir l'heure actuelle et essayez d'obtenir la différence.
>>> from datetime import datetime, timedelta
>>> d0 = datetime.now()
>>> d1 = datetime.now()
>>> td = d1 - d0
>>> td
datetime.timedelta(seconds=1, microseconds=508102)
Le résultat de la différence est de type «timedelta», auquel cas la différence entre les deux heures est de 1 seconde + 508102 microsecondes = 1,508102 secondes. Chaque valeur peut être obtenue en tant que valeur d'attribut.
>>> td.days
0
>>> td.seconds
1
>>> td.microseconds
508102
Considérons maintenant une différence légèrement plus grande.
>>> d0 = datetime(2020,7,31,22,5,0, 113459)
>>> d1 = datetime(2020,8,3,5,55,26, 93450)
>>> d1 - d0
datetime.timedelta(days=2, seconds=28225, microseconds=979991)
De 22h05: 0,113459 le 31 juillet à 17h55: 26,093450 le 3 août. Il suffit de soustraire les deux dates et vous verrez que la différence est de 2 jours et 28225,979991 secondes. Dans cet exemple, la différence entre les dates à travers les mois est prise, et c'est un calcul gênant et sujet aux erreurs à faire à la main, mais il est très utile que datetime le fasse bien.
Bien qu'il puisse être calculé facilement comme ça, "2 jours et 28225,979991 secondes" est subtilement difficile à comprendre. Combien d'heures est-ce? L'obstacle monte dès que je pense. La première chose qui me vient à l'esprit est de retirer la valeur de l'attribut et de la calculer.
>>> td.days * 24 + (td.seconds + td.microseconds / 1000000 ) / 60 / 60
55.8405499975
Ou vous pouvez utiliser la méthode total_seconds ()
pour le rendre un peu plus facile.
>>> td.total_seconds() / 60 / 60
55.840549997500005
Il y a une légère erreur ici.
En tout cas, ce n'est pas un calcul difficile, mais c'est dommage que je ne puisse pas l'utiliser même si j'ai un type spécial appelé timedelta.
Mais en fait, je peux. C'est le sujet principal d'aujourd'hui, mais la solution est très simple: "** Diviser par delta temporel de l'unité que vous voulez calculer **".
Par exemple, dans le cas ci-dessus
>>> td / timedelta (hours=1)
55.8405499975
Oh, n'est-ce pas incroyable? J'écrirai un peu pourquoi cela se produit.
Bien que timedelta ait trois valeurs d'attribut, jours, secondes et microsecondes, le constructeur prend également en charge d'autres unités de temps avec des arguments de mot-clé.
>>> timedelta(minutes=1)
datetime.timedelta(seconds=60)
>>> timedelta(hours=1)
datetime.timedelta(seconds=3600)
>>> timedelta(weeks=1)
datetime.timedelta(days=7)
Comme vous pouvez le voir, s'il est spécifié dans une unité différente, il est normalisé en jours, secondes, microsecondes et enregistré en tant qu'attribut de timedelta.
Et la division entre timedeltas calculera le rapport des deux intervalles de temps, et le résultat sera un flottant. Par conséquent, si elle est exprimée en unités "heure", vous pouvez obtenir la valeur souhaitée en divisant par timedelta (heures = 1)
.
En appliquant ceci, par exemple, lorsque vous pensez "Combien de semaines vont du 5/6 au 8/19?"
>>> (datetime (2020, 8,19) - datetime (2020, 5, 6)) / timedelta(weeks=1)
15.0
Peut être calculé en un seul coup.
Cela fait longtemps que datetime a été introduit dans Python, mais je n'ai jamais utilisé timedelta comme ça auparavant. Selon Podcast, ce n'est pas une astuce, cela semble être l'usage prévu par l'auteur de timedelta lui-même, mais si tel est le cas, j'aimerais que vous fassiez un exemple dans le document ou que vous fassiez un effort pour le diffuser un peu plus ( Lol)
Recommended Posts