Respostas:
Você não pode comparar um momento específico (como "agora") com um evento recorrente não corrigido (8 horas da manhã acontecem todos os dias).
Você pode verificar se agora é antes ou depois das 8h de hoje :
>>> 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
Você pode usar o time()
método de datetime
objetos para obter a hora do dia, que pode ser usada para comparação sem levar em consideração a data:
>>> 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
datetime.datetime.now().time()
, não se esqueça dos colchetes now()
!
Inspirado por Roger 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"
Outra maneira de fazer isso sem adicionar dependências ou usar datetime é simplesmente fazer algumas contas nos atributos do objeto de tempo. Possui horas, minutos, segundos, milissegundos e um fuso horário. Para comparações muito simples, horas e minutos devem ser suficientes.
d = datetime.utcnow()
t = d.time()
print t.hour,t.minute,t.second
Não recomendo fazer isso, a menos que você tenha um caso de uso incrivelmente simples. Para qualquer coisa que requeira reconhecimento de fuso horário ou reconhecimento de datas, você deve usar datetime.
Estou surpreso por não ter visto este forro aqui:
datetime.datetime.now().hour == 8
Você pode usar a função Timedelta para comparação de aumento de x tempo.
>>> import datetime
>>> now = datetime.datetime.now()
>>> after_10_min = now + datetime.timedelta(minutes = 10)
>>> now > after_10_min
False
'23:23:00' > '23:59:00'
ou'23:23:00' > '23:09:22'
, assim como você faria entre doisdatetime.datetime.now().strftime('%H:%M')
valores. É a melhor forma de comparar os tempos? Eu não sei. Funciona? Tanto quanto eu testei, funcionou bem. Mas definitivamente (e claro): não há chance de usar isso com a string datetime que tem mês, dias da semana.