Was ist eine klassische Methode, um ein Python-Datum / Uhrzeit-Objekt abzuschneiden?
In diesem speziellen Fall auf den Tag. Stellen Sie also im Grunde Stunde, Minute, Sekunden und Mikrosekunden auf 0 ein.
Ich möchte, dass die Ausgabe auch ein Datum / Uhrzeit-Objekt ist, keine Zeichenfolge.
replace()
Methode zurückgibt ein Datetime - Objekt, so dass die korrekte Beschwörung wäre:dt = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
datetime
, keindate
Objekt (das Sie mitdt.date()
call bekommen könnten (kein expliziter Konstruktor nötig)). Die.replace()
Methode kann fehlschlagen, wenndatetime
Nanosekundenunterstützung hinzugefügt wird . Sie könnten verwendendatetime.combine()
statt .datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
?Verwenden Sie ein
date
Nicht-A,datetime
wenn Sie sich nicht um die Zeit kümmern.Sie können eine Datums- und Uhrzeitangabe wie folgt aktualisieren:
quelle
Vier Jahre später: ein anderer Weg, um zu vermeiden
replace
Ich weiß, dass die akzeptierte Antwort von vor vier Jahren funktioniert, aber dies scheint ein bisschen leichter zu sein als die Verwendung von
replace
:Anmerkungen
datetime
Objekt erstellen, ohne die Zeiteigenschaften an den Konstruktor zu übergeben, erhalten Sie Mitternacht.dt = datetime.datetime.now()
quelle
Sie können ein datetime-Objekt nicht abschneiden, da es unveränderlich ist .
Hier ist jedoch eine Möglichkeit, eine neue Datums- / Uhrzeitangabe mit Feldern von 0 Stunden, Minuten, Sekunden und Mikrosekunden zu erstellen, ohne das ursprüngliche Datum oder tzinfo wegzuwerfen:
quelle
replace
Option an die erste Stelle setzen, da dies wahrscheinlich das ist, was sie wollen.tzinfo=now.tzinfo
. Dietzinfo
Mitternacht kann unterschiedlich sein, z. B. ist der UTC-Versatz um2012-04-01 00:09:00
(9 Uhr morgens ) in der Zeitzone Australien / Melbourne,AEST+10:00
aber es istAEDT+11:00
um2012-04-01 00:00:00
(Mitternacht) - an diesem Tag gibt es einen Übergang zum Ende der Sommerzeit. Sie könnten daspytz
Modul verwenden, um es zu beheben, siehe meine Antwort.Um eine Mitternacht zu erhalten, die einem bestimmten Datum / Uhrzeit-Objekt entspricht, können Sie die folgende
datetime.combine()
Methode verwenden :Der Vorteil gegenüber der
.replace()
Methode besteht darin, dass diedatetime.combine()
Lösung auf Basis auch dann weiter funktioniert, wenn dasdatetime
Modul die Nanosekunden-Unterstützung einführt .tzinfo
kann bei Bedarf beibehalten werden, aber der utc-Offset kann um Mitternacht unterschiedlich sein, z. B. aufgrund eines DST-Übergangs, und daher kann eine naive Lösung (Einstellen des Zeitattributstzinfo
) fehlschlagen. Siehe Wie erhalte ich die UTC-Zeit von „Mitternacht“ für eine bestimmte Zeitzone?quelle
Sie könnten dafür Pandas verwenden (obwohl es für diese Aufgabe Overhead sein könnte). Sie können Rund- , Boden- und Deckenwerte wie für übliche Zahlen und jede Pandas-Frequenz aus Offset-Aliasen verwenden :
quelle
Mit datetime.strftime können Sie den Tag, den Monat, das Jahr ...
Beispiel:
Ausgabe (für heute):
Wenn Sie nur den Tag abrufen möchten, können Sie das Tagesattribut wie folgt verwenden:
Ausgabe (für heute):
quelle
d.day
usw.Es gibt eine großartige Bibliothek, mit der Datumsangaben bearbeitet werden können : Delorean
und wenn Sie den Datum / Uhrzeit-Wert zurückerhalten möchten:
quelle
Weitere Informationen finden Sie unter https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.floor.html
Es ist jetzt 2019, ich denke, der effizienteste Weg, dies zu tun, ist:
quelle
Es gibt ein Modul datetime_truncate, das dies für Sie handhabt. Es wird nur datetime.replace aufgerufen.
quelle
6 Jahre später ... Ich fand diesen Beitrag und ich mochte mehr den numpy Ansatz:
Prost
quelle
quelle
Sie können einfach verwenden
Es ist leicht und gibt genau das zurück, was Sie wollen.
quelle
Was bedeutet Abschneiden?
Sie haben die volle Kontrolle über die Formatierung, indem Sie die Methode strftime () und eine geeignete Formatzeichenfolge verwenden.
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
quelle
Wenn Sie mit einer Serie vom Typ DateTime arbeiten, gibt es eine effizientere Möglichkeit, diese abzuschneiden, insbesondere wenn das Series-Objekt viele Zeilen enthält.
Sie können die Bodenfunktion verwenden
Wenn Sie es beispielsweise auf Stunden kürzen möchten:
Generieren Sie eine Reihe von Daten
Wir können es überprüfen, indem wir die Laufzeit zwischen der Ersetzungs- und der Bodenfunktion vergleichen.
quelle
Hier ist noch ein anderer Weg, der in eine Zeile passt, aber nicht besonders elegant ist:
quelle