I have a datetime object produced using
strptime ().
>>> tm
datetime.datetime(2010, 6, 10, 3, 56, 23)
Was ich tun muss, ist rund um die Minute auf die nächste 10. Minute. Bis jetzt habe ich den Minutenwert genommen und round () verwendet.
min = round(tm.minute, -1)
Wie im obigen Beispiel gibt es jedoch eine ungültige Zeit an, wenn der Minutenwert größer als 56 ist. Dh: 3:60
Was ist ein besserer Weg, dies zu tun? Hat datetime
unterstützt das?
dt.replace(hour=0, minute=0, second=0)
statt verwendendt.min
.roundTime(datetime.datetime(2012,12,31,23,44,59,1234),roundTo=60*60*24*7)
vsroundTime(datetime.datetime(2012,12,30,23,44,59,1234),roundTo=60*60*24*7)
datetime.timedelta(100,1,2,3).seconds == 1
Von der besten Antwort, die ich auf eine angepasste Version geändert habe, bei der nur Datetime-Objekte verwendet wurden, muss die Konvertierung in Sekunden vermieden werden, und der aufrufende Code wird besser lesbar:
Proben mit 1 Stunde Rundung & 15 Minuten Rundung:
quelle
print roundTime(datetime.datetime(2012,12,20,23,44,49),datetime.timedelta(days=15))
2012-12-20 00:00:00
währendprint roundTime(datetime.datetime(2012,12,21,23,44,49),datetime.timedelta(days=15))
2012-12-21 00:00:00
Ich habe Stijn Nevens Code verwendet (danke Stijn) und habe ein kleines Add-On zum Teilen. Auf- und Abrunden und auf den nächsten runden.
Update 2019-03-09 = Kommentar Spinxz aufgenommen; Danke.
Update 27.12.2019 = Kommentar Bart aufgenommen; Danke.
Getestet auf date_delta von "X Stunden" oder "X Minuten" oder "X Sekunden".
quelle
up
Rundung ist mit dieser Funktion ohnehin ungenau;2019-11-07 14:39:00.776980
mitdate_delta
gleich zB 30 sek undto='up'
ergibt2019-11-07 14:39:00
.up
Runden möglicherweise kein häufiger Anwendungsfall ist, ist es erforderlich, wenn Sie Anwendungen bearbeiten, die an der Minutengrenze beginnenPandas hat eine Datetime-Round-Funktion, aber wie bei den meisten Dingen in Pandas muss es im Serienformat sein.
Docs - Ändern Sie die Frequenzzeichenfolge nach Bedarf.
quelle
Timestamp
enthältfloor
undceil
auchWenn Sie die Bedingung nicht verwenden möchten, können Sie den
modulo
Operator verwenden:AKTUALISIEREN
Wolltest du so etwas?
.. wenn Sie Ergebnis als Zeichenfolge möchten. Um ein Datum / Uhrzeit-Ergebnis zu erhalten, ist es besser, timedelta zu verwenden - siehe andere Antworten;)
quelle
Ich benutze das. Es hat den Vorteil, mit tz-fähigen Datenzeiten zu arbeiten.
Es hat den Nachteil, nur für Zeitscheiben von weniger als einer Stunde zu arbeiten.
quelle
Hier ist eine einfachere allgemeine Lösung ohne Gleitkommapräzisionsprobleme und externe Bibliotheksabhängigkeiten:
In deinem Fall:
quelle
quelle
Basierend auf Stijn Nevens und modifiziert für Django, um die aktuelle Zeit auf die nächsten 15 Minuten zu runden.
Wenn Sie Datum und Uhrzeit benötigen, entfernen Sie einfach das
.strftime('%H:%M:%S')
quelle
Nicht die beste Geschwindigkeit, wenn die Ausnahme abgefangen wird, dies würde jedoch funktionieren.
Timings
quelle
Eine zweizeilige intuitive Lösung zum Runden auf eine bestimmte Zeiteinheit, hier Sekunden, für ein
datetime
Objektt
:Wenn Sie zu einer anderen Einheit runden möchten, ändern Sie einfach
format_str
.Dieser Ansatz rundet nicht wie oben beschrieben auf beliebige Zeitbeträge, sondern ist eine gut pythonische Methode, um auf eine bestimmte Stunde, Minute oder Sekunde zu runden.
quelle
Andere Lösung:
Hoffe das hilft!
quelle
Der kürzeste Weg, den ich kenne
quelle
Diese scheinen zu komplex
quelle
Ein unkomplizierter Ansatz:
quelle
Ja, wenn Ihre Daten zu einer DateTime-Spalte in einer Pandas-Reihe gehören, können Sie sie mit der integrierten Funktion pandas.Series.dt.round aufrunden. Siehe Dokumentation hier auf pandas.Series.dt.round . Wenn Sie auf 10 Minuten runden, ist dies Series.dt.round ('10min') oder Series.dt.round ('600s') wie folgt:
Bearbeiten, um Beispielcode hinzuzufügen:
quelle