¿Cómo comparo un objeto datetime.datetime.now (). Time () con un entero como 12?

Necesito hacer una condición if, que verifica si la hora del día es antes de las 12 p.m. o después de las 12 p.m. y tomar las medidas correspondientes.

2
Sir Muffington 4 oct. 2019 a las 23:00

5 respuestas

La mejor respuesta

Simple: no lo haces. En su lugar, crea un objeto datetime para comparar:

import datetime
a = datetime.datetime.now().time()
b = datetime.time(12, 00, 00, 000000)
if a < b:
     print("Do x here")
else:
      print("Do y here")
3
Sir Muffington 5 oct. 2019 a las 15:05

La clase datetime.time () tiene un atributo de hora que puede usar para su propósito.

import datetime

datetime_object = datetime.datetime.now().time()

if datetime_object.hour >= 12:
    print("Wow it's after 12 pm")
else:
    print("Wow it's before 12 pm")
1
Daniel Ocando 4 oct. 2019 a las 20:47

Además de las soluciones mencionadas anteriormente, también puede hacer esto:

import time
d = time.localtime()
if d.tm_hour > 12 && d.tm_sec>0:
   ...

Hay un thread que explica por qué usar el módulo time podría ser mejor que datetime.

1
Anshul Choudhary 5 oct. 2019 a las 04:35

No puede comparar una instancia datetime con un número entero directamente , pero puede convertir uno a un número entero utilizando primero el timestamp() para convertirlo en un valor de punto flotante y luego convertirlo en un entero con la función incorporada round().

En el siguiente código, se crea un número entero que representa el mediodía del día actual, y luego se compara con un número entero que representa la fecha y hora actuales.

Como esto requiere uno o más pasos intermedios, probablemente sería más eficiente crear un objeto datatime que represente las 12 p. M. Del día actual y compararlo con la fecha y hora actuales (como lo hace en su propia respuesta).

import datetime

now = datetime.datetime.now()
noon = datetime.datetime(now.year, now.month, now.day, hour=12)

noon_today = round(noon.timestamp())  # Convert to integer.
now_as_int = round(now.timestamp())

if now_as_int < noon_today:
     print("before noon")
else:
     print("noon or later")
1
martineau 5 oct. 2019 a las 16:17
d = datetime.datetime.now().time()
if d.hour > 12:
...
2
JulienV 4 oct. 2019 a las 20:07
58242561