Comment calculer "xx time" en un seul coup avec Python Timedelta

introduction

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.

Qu'est-ce que timedelta

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.

Convertir timedelta en temps

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.

Résumé

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

Comment calculer "xx time" en un seul coup avec Python Timedelta
Comment convertir 0,5 en 1056964608 en un seul coup
Comment calculer la date avec python
Comment utiliser BigQuery en Python
[REAPER] Comment jouer à Reascript avec Python
Comment mesurer le temps d'exécution avec Python Partie 1
Comment utiliser tkinter avec python dans pyenv
Comment mesurer le temps d'exécution avec Python, partie 2
Comment obtenir la différence de date et d'heure en secondes avec Python
Comment convertir / restaurer une chaîne avec [] en python
Comment faire un calcul de hachage avec Salt en Python
Comment mesurer le temps de traitement avec Python ou Java
Expliquez en détail comment créer un son avec python
Comment faire du zéro-padding sur une ligne avec OpenCV
Comment exécuter des tests avec Python unittest
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Comment développer en Python
Comment adapter plusieurs bibliothèques d'apprentissage automatique en une seule fois
Comment vérifier le comportement d'ORM avec un fichier avec django
[Python] Comment écrire une instruction if en une phrase.
[Python] Dessinez des dataframes Pandas dans Plotly avec des boutons de manchette
Comment se connecter à AtCoder avec Python et soumettre automatiquement
[Python] Comment faire PCA avec Python
Python: comment utiliser async avec
Comment collecter des images en Python
Comment utiliser SQLite en Python
Essayez de calculer Trace en Python
Comment démarrer avec Python
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment gérer le japonais avec Python
Comment gérer l'erreur d'installation de python dans pyenv (BUILD FAILED)
Comment ne pas échapper au japonais en traitant avec JSON en Python
Pour utiliser python, mettez pyenv sur macOS avec PyCall
Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python
Comment écrire hors ligne en temps réel Résolution des problèmes F01 avec Python
[Introduction à Python] Comment utiliser la classe en Python?
Essayez de vous connecter à qiita avec Python
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
[Itertools.permutations] Comment créer une séquence en Python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment extraire une zone de polygone en Python
Comment faire un test de sac avec python
Comment vérifier la version d'opencv avec python
Comment afficher le japonais python avec lolipop
Un serveur Web de ligne (avec CGI) en python
Comment changer de version de Python dans cloud9
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python
Comment entrer le japonais avec les malédictions Python
[Python] Comment calculer MAE et RMSE
Pour faire fonctionner la station d'horodatage en Python