2017-01-11 10 views
5

Jak zaokrąglić datetime do poprzedniej godziny? na przykład:Zaokrąglij datetime do poprzedniej godziny

print datetime.now().replace(microsecond=0) 
>> 2017-01-11 13:26:12.0 

zaokrąglić w dół do poprzedniej godziny: 2017-01-11 12:00:00.0

+2

Jeśli Twoja data to "2017-01-11 00: 11: 22", czy chcesz, aby twoja data była poprzedniego dnia? Czy musisz wziąć pod uwagę czas letni? –

+0

nie, chcę, żeby to było "2017-01-11 00: 00: 00' – DougKruger

+0

@DougKruger: Jestem nieco zdezorientowany: mówisz, że chcesz zaokrąglić do * poprzedniej * godziny, ale w swoim komentarzu, wydaje się, że tylko zaokrąglasz. Czy tak jest tylko na początku dnia? Czy mogę coś przeoczyć? –

Odpowiedz

10

Biorąc chcesz rundzie aż do godziny, można po prostu zastąpić minutes, seconds i minutes wszystko do zera:

print(datetime.now().replace(microsecond=0,second=0,minute=0)) 

Jeśli chcesz zaokrąglić w dół do poprzednie godzin (jak podano w przykładzie 2017-01-11 13:26:12.0 do 2017-01-11 12:00:00.0) wymienić microseconds, seconds i minutes z 0, a potem odjąć jedną godzinę z nim:

from datetime import datetime, timedelta 

print(datetime.now().replace(microsecond=0,second=0,minute=0)-timedelta(hours=1)) 

przykład, w powłoce:

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from datetime import datetime, timedelta 
>>> print(datetime.now().replace(microsecond=0,second=0,minute=0)-timedelta(hours=1)) 
2017-01-11 16:00:00 
+0

Najpierw musisz sprawdzić, czy minuty/sekundy/mikrosekundy nie są równe 0. W przeciwnym razie zaokrąglymy '2017-01-11 16: 00: 00' do" 2017-01-11 15: 00: 00 ". – chepner

+0

@chepner: Nie rozumiem dlaczego? OP prosi o * poprzednią * godzinę. Biorąc pod uwagę, że jest to "12: 00: 00" dokładnie, poprzedni jest "11: 00: 00" –

+0

Zaokrąglanie w dół zwykle nie jest stosowane do wartości, która jest już poprawną wartością zaokrągloną. '12: 00: 00' jest wartością zaokrągloną,' 12: 00: 01' nie jest. – chepner

2
from datetime import datetime, timedelta 

n = datetime.now() - timedelta(hours=1) 
new_date = datetime(year=n.year, month=n.month, day=n.day, hour=n.hour) 
Powiązane problemy