Widzę, że można dokonać porównań dat i jest też datetime.timedelta()
, ale staram się dowiedzieć, jak sprawdzić, czy aktualna godzina ( datetime.datetime.now()
) jest wcześniejsza, późniejsza lub taka sama niż określona godzina (np. 8 rano) niezależnie od daty.
106
'23:23:00' > '23:59:00'
lub'23:23:00' > '23:09:22'
, tak jak zrobiłbyś to między dwiemadatetime.datetime.now().strftime('%H:%M')
wartościami. Czy jest to najlepszy sposób na porównanie czasów? Nie wiem Czy to działa? O ile testowałem, działało dobrze. Ale zdecydowanie (i oczywiście): nie ma szans na użycie tego z ciągiem daty i godziny, które mają miesiąc i dni tygodnia.Odpowiedzi:
Nie można porównać określonego punktu w czasie (na przykład „teraz”) z nieokreślonym, powtarzającym się wydarzeniem (codziennie o 8 rano).
Możesz sprawdzić, czy teraz jest przed, czy po dzisiejszej 8:00:
>>> import datetime >>> now = datetime.datetime.now() >>> today8am = now.replace(hour=8, minute=0, second=0, microsecond=0) >>> now < today8am True >>> now == today8am False >>> now > today8am False
źródło
Możesz skorzystać z
time()
metodydatetime
obiektów, aby uzyskać porę dnia, której możesz użyć do porównania bez uwzględnienia daty:>>> this_morning = datetime.datetime(2009, 12, 2, 9, 30) >>> last_night = datetime.datetime(2009, 12, 1, 20, 0) >>> this_morning.time() < last_night.time() True
źródło
datetime.datetime.now().time()
, nie zapomnij o nawiasachnow()
!Możesz bezpośrednio porównać obiekty datetime.datetime
Na przykład:
>>> a datetime.datetime(2009, 12, 2, 10, 24, 34, 198130) >>> b datetime.datetime(2009, 12, 2, 10, 24, 36, 910128) >>> a < b True >>> a > b False >>> a == a True >>> b == b True >>>
źródło
Zainspirowany Rogerem Pate:
import datetime def todayAt (hr, min=0, sec=0, micros=0): now = datetime.datetime.now() return now.replace(hour=hr, minute=min, second=sec, microsecond=micros) # Usage demo1: print todayAt (17), todayAt (17, 15) # Usage demo2: timeNow = datetime.datetime.now() if timeNow < todayAt (13): print "Too Early"
źródło
Innym sposobem na zrobienie tego bez dodawania zależności lub używania daty i godziny jest po prostu wykonanie pewnych działań matematycznych na atrybutach obiektu czasu. Zawiera godziny, minuty, sekundy, milisekundy i strefę czasową. W przypadku bardzo prostych porównań wystarczające powinny być godziny i minuty.
d = datetime.utcnow() t = d.time() print t.hour,t.minute,t.second
Nie polecam tego robić, chyba że masz niewiarygodnie prosty przypadek użycia. Do wszystkiego, co wymaga znajomości strefy czasowej lub dat, powinieneś używać daty i godziny.
źródło
Zaskoczony, że nie widziałem tutaj tej jednej wkładki:
datetime.datetime.now().hour == 8
źródło
Możesz użyć funkcji Timedelta do porównania wzrostu czasu x.
>>> import datetime >>> now = datetime.datetime.now() >>> after_10_min = now + datetime.timedelta(minutes = 10) >>> now > after_10_min False
Tylko połączenie tych odpowiedzi to I Roger
źródło
datetime mają możliwość porównania
>>> import datetime >>> import time >>> a = datetime.datetime.now() >>> time.sleep(2.0) >>> b = datetime.datetime.now() >>> print a < b True >>> print a == b False
źródło