I have a datetime object produced using
strptime ().
>>> tm
datetime.datetime(2010, 6, 10, 3, 56, 23)
Muszę zaokrąglić minutę do najbliższej dziesiątej minuty. To, co robiłem do tej pory, polegało na braniu wartości minutowej i używaniu na niej round ().
min = round(tm.minute, -1)
Jednak, podobnie jak w powyższym przykładzie, podaje nieprawidłowy czas, gdy wartość minut jest większa niż 56. tj .: 3:60
Jaki jest lepszy sposób na zrobienie tego? Czy datetime
to obsługuje?
dt.replace(hour=0, minute=0, second=0)
zamiastdt.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
Od najlepszej odpowiedzi, którą zmodyfikowałem, do wersji dostosowanej, używając tylko obiektów datetime, pozwala to uniknąć konwersji na sekundy i sprawia, że kod wywołujący jest bardziej czytelny:
Próbki z zaokrąglaniem 1 godziny i 15 minut:
źródło
print roundTime(datetime.datetime(2012,12,20,23,44,49),datetime.timedelta(days=15))
2012-12-20 00:00:00
podczas gdyprint roundTime(datetime.datetime(2012,12,21,23,44,49),datetime.timedelta(days=15))
2012-12-21 00:00:00
Użyłem kodu Stijn Nevens (dziękuję Stijn) i mam mały dodatek do udostępnienia. Zaokrąglanie w górę, w dół i zaokrąglanie do najbliższej.
aktualizacja 2019-03-09 = komentarz Spinxz włączony; Dziękuję Ci.
aktualizacja 2019-12-27 = komentarz Bart włączony; Dziękuję Ci.
Przetestowano dla date_delta „X godzin”, „X minut” lub „X sekund”.
źródło
up
Zaokrąglanie jest zresztą niedokładne z tej funkcji;2019-11-07 14:39:00.776980
zdate_delta
równą na przykład 30 s, ato='up'
wyniki w2019-11-07 14:39:00
.up
zaokrąglanie może nie być częstym przypadkiem użycia, jest potrzebne, gdy masz do czynienia z aplikacjami, które zaczynają się w granicy minutyPandy mają funkcję rundy z datą i godziną, ale tak jak w przypadku większości rzeczy w Pandach, musi być w formacie serii.
Dokumenty - zmień ciąg częstotliwości według potrzeb.
źródło
Timestamp
zawierafloor
iceil
równieżjeśli nie chcesz używać warunku, możesz użyć
modulo
operatora:AKTUALIZACJA
czy chciałeś czegoś takiego?
.. jeśli chcesz, aby wynik był ciągiem. do uzyskania wyniku datetime lepiej użyć timedelta - zobacz inne odpowiedzi;)
źródło
używam tego. ma tę zaletę, że pracuje z czasami dat świadomymi tz.
ma tę wadę, że pracuje tylko w odstępach czasu krótszych niż godzina.
źródło
Oto prostsze uogólnione rozwiązanie bez problemów z precyzją zmiennoprzecinkową i zależnościami od zewnętrznych bibliotek:
W Twoim przypadku:
źródło
źródło
Oparty na Stijn Nevens i zmodyfikowany do użycia w Django, aby zaokrąglić bieżący czas do najbliższych 15 minut.
jeśli potrzebujesz pełnej daty i godziny, po prostu usuń rozszerzenie
.strftime('%H:%M:%S')
źródło
Nie jest to najlepszy sposób na szybkość, gdy zostanie przechwycony wyjątek, jednak to zadziała.
Czasy
źródło
Dwa linia intuicyjne rozwiązanie okrągłego na danej jednostce czasu, tutaj sekundami, dla
datetime
obiektut
:Jeśli chcesz zaokrąglić do innej jednostki, po prostu zmień
format_str
.To podejście nie zaokrągla do dowolnych kwot czasu, jak powyższe metody, ale jest ładnym sposobem Pythona na zaokrąglenie do określonej godziny, minuty lub sekundy.
źródło
Inne rozwiązanie:
Mam nadzieję że to pomoże!
źródło
Najkrótsza droga jaką znam
źródło
Wydają się zbyt skomplikowane
źródło
Proste podejście:
źródło
tak, jeśli Twoje dane należą do kolumny DateTime w serii pand, możesz je zaokrąglić w górę za pomocą wbudowanej funkcji pandas.Series.dt.round. Zobacz dokumentację tutaj na pandas.Series.dt.round . W przypadku zaokrąglenia do 10 minut będzie to Series.dt.round ('10min') lub Series.dt.round ('600s'), jak na przykład:
Edytuj, aby dodać Przykładowy kod:
źródło