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