So berechnen Sie "xx time" in einem Schuss mit Python timedelta

Einführung

Jetzt, da ich fast vollständig remote arbeite, muss ich keine Zeit mehr mit dem Pendeln verbringen. Es ist großartig, weil ich diese Zeit woanders nutzen kann, aber ich mache mir Sorgen, dass ich weniger Gelegenheit habe, mich zu bewegen, und ich kann keine Zeit haben, den Podcast anzuhören. Um beide zu lösen, ging ich jeden Morgen ein wenig in einen Supermarkt (Eröffnung um 8 Uhr!). Heute hörte ich einen Podcast namens PythonBytes. Ich habe über einige Tipps aus meinen Augen gesprochen, deshalb möchte ich sie vorstellen.

Die Leute, die im Podcast sprachen, sagten auch: „Nun, können Sie das tun?“ „Ich wusste es nicht“, aber ich war überrascht, das zu hören. Für diejenigen, die direkt hören möchten, 27 von Episode # 190 Es ist ungefähr eine Minute.

Was ist Timedelta?

timedelta ist eine Funktion, die in der Standard-Python-Bibliothek enthalten ist und im Modul datetime enthalten ist. Wenn die "datetime" voneinander subtrahiert werden, werden Daten vom Typ "timedelta" zurückgegeben.

Rufen Sie datetime.now () zweimal auf, um die aktuelle Uhrzeit abzurufen und den Unterschied zu ermitteln.

>>> from datetime import datetime, timedelta
>>> d0 = datetime.now()
>>> d1 = datetime.now()
>>> td = d1 - d0
>>> td
datetime.timedelta(seconds=1, microseconds=508102)

Das Ergebnis der Differenz ist vom Typ "Zeitdelta". In diesem Fall beträgt die Differenz zwischen den beiden Zeiten 1 Sekunde + 508102 Mikrosekunden = 1,508102 Sekunden. Jeder Wert kann als Attributwert erhalten werden.

>>> td.days
0
>>> td.seconds
1
>>> td.microseconds
508102

Betrachten Sie nun einen etwas größeren Unterschied.

>>> 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)

Von 22:05: 0.113459 am 31. Juli bis 5:55: 26.093450 am 3. August. Subtrahieren Sie einfach die beiden Datumszeiten und Sie werden sehen, dass die Differenz 2 Tage und 28225.979991 Sekunden beträgt. In diesem Beispiel wird der Unterschied zwischen den Daten über die Monate hinweg ermittelt, und es ist eine mühsame und fehleranfällige Berechnung, die von Hand durchgeführt werden muss. Es ist jedoch sehr hilfreich, dass datetime dies tut.

Zeitdelta in Zeit umwandeln

Obwohl es leicht so berechnet werden kann, ist "2 Tage und 28225.979991 Sekunden" auf subtile Weise schwer zu verstehen. Wie viele Stunden ist das? Die Hürde steigt, sobald ich denke. Das erste, was mir in den Sinn kommt, ist, den Attributwert herauszunehmen und zu berechnen.

>>> td.days * 24 + (td.seconds + td.microseconds / 1000000 ) / 60 / 60
55.8405499975

Oder Sie können die Methode "total_seconds ()" verwenden, um es ein wenig einfacher zu machen.

>>> td.total_seconds() / 60 / 60
55.840549997500005

Hier liegt ein kleiner Fehler vor.

Auf jeden Fall ist es keine schwierige Berechnung, aber es ist eine Schande, dass ich sie nicht verwenden kann, obwohl ich einen speziellen Typ namens timedelta habe.

Aber eigentlich kann ich. Das ist das Hauptthema von heute, aber die Lösung ist sehr einfach: "** Teilen Sie durch die Einheit timedelta, die Sie berechnen möchten **".

Zum Beispiel im obigen Fall

>>> td / timedelta (hours=1)
55.8405499975

Oh, ist es nicht erstaunlich? Ich werde ein wenig darüber schreiben, warum dies passiert.

Obwohl timedelta drei Attributwerte hat: Tage, Sekunden und Mikrosekunden, unterstützt der Konstruktor auch andere Zeiteinheiten mit Schlüsselwortargumenten.

>>> timedelta(minutes=1)
datetime.timedelta(seconds=60)
>>> timedelta(hours=1)
datetime.timedelta(seconds=3600)
>>> timedelta(weeks=1)
datetime.timedelta(days=7)

Wie Sie sehen können, wird es, wenn es in einer anderen Einheit angegeben ist, auf Tage, Sekunden, Mikrosekunden normalisiert und als Attribut von timedelta gespeichert.

Die Aufteilung zwischen Zeitdelas berechnet das Verhältnis der beiden Zeitintervalle, und das Ergebnis ist ein Float. Wenn es sich also um "Stunden" -Einheiten handelt, können Sie den gewünschten Wert erhalten, indem Sie durch "Zeitdelta (Stunden = 1)" dividieren.

Wenn Sie dies beispielsweise anwenden, wenn Sie denken: "Wie viele Wochen sind 5/6 bis 8/19?"

>>> (datetime (2020, 8,19) - datetime (2020, 5, 6)) / timedelta(weeks=1)
15.0

Kann in einem Schuss berechnet werden.

Zusammenfassung

Es ist lange her, dass datetime in Python eingeführt wurde, aber ich habe timedelta noch nie so verwendet. Laut Podcast ist dies kein Trick, es scheint die vom Autor von timedelta selbst beabsichtigte Verwendung zu sein, aber wenn dies der Fall ist, möchte ich Sie bitten, ein Beispiel in das Dokument aufzunehmen oder sich zu bemühen, es ein wenig weiter zu verbreiten ( Lol)

Recommended Posts

So berechnen Sie "xx time" in einem Schuss mit Python timedelta
So konvertieren Sie 0,5 in 1056964608 auf einmal
So berechnen Sie das Datum mit Python
So arbeiten Sie mit BigQuery in Python
[REAPER] Wie man Reascript mit Python spielt
So messen Sie die Ausführungszeit mit Python Teil 1
Wie man tkinter mit Python in Pyenv benutzt
So messen Sie die Ausführungszeit mit Python Part 2
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So führen Sie eine Hash-Berechnung mit Salt in Python durch
So messen Sie die Verarbeitungszeit mit Python oder Java
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen
So führen Sie mit OpenCV ein Null-Padding in einer Zeile durch
So führen Sie Tests zusammen mit Python unittest aus
So messen Sie die Wiedergabezeit von MP3-Dateien mit Python
Wie man in Python entwickelt
So passen Sie mehrere Bibliotheken für maschinelles Lernen auf einmal an
So überprüfen Sie das Verhalten von ORM mit einer Datei mit django
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
[Python] Zeichnen Sie Pandas-Datenrahmen in Plotly mit Manschettenknöpfen
So melden Sie sich mit Python bei AtCoder an und senden automatisch
[Python] Wie man PCA mit Python macht
Python: So verwenden Sie Async mit
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Versuchen Sie, Trace in Python zu berechnen
Erste Schritte mit Python
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Umgang mit Japanisch mit Python
Wie man mit Python-Installationsfehlern in pyenv umgeht (BUILD FAILED)
Wie man Japanern nicht entgeht, wenn man mit json in Python umgeht
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
So schreiben Sie offline in Echtzeit Lösen von E04-Problemen mit Python
So schreiben Sie offline in Echtzeit Lösen von F01-Problemen mit Python
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Versuchen Sie, sich mit Python bei qiita anzumelden
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
[Itertools.permutations] So löschen Sie eine Sequenz in Python
So zeigen Sie die neunundneunzig Tabelle in Python an
So extrahieren Sie einen Polygonbereich in Python
Wie man einen Taschentest mit Python macht
So überprüfen Sie die Version von opencv mit Python
So zeigen Sie Python-Japanisch mit Lolipop an
Einzeiler webServer (mit CGI) in Python
So wechseln Sie die Python-Version in Cloud9
So passen Sie den Bildkontrast in Python an
Verwendung von __slots__ in der Python-Klasse
So füllen Sie mit Python dynamisch Nullen aus
Wie man mit Python-Flüchen Japanisch eingibt
[Python] Berechnen von MAE und RMSE
So betreiben Sie die Zeitstempelstation in Python