Quiero atrapar valores como este (en el que no hay 'información de tiempo' en la fecha y hora):

datetime.datetime(2009, 4, 6, 0, 0)

¿Hay una mejor manera de detectar estos valores que no sea probar hora / minuto / segundo?

if value.hour == 0 and value.minute == 0 and value.second == 0:
     # do stuff
3
T. Stone 15 sep. 2009 a las 00:15

4 respuestas

La mejor respuesta

El método del tiempo funciona aquí. Evalúa como falso booleano si hay información de tiempo cero.

if not value.time():
    # do stuff
11
wim 12 dic. 2020 a las 01:12

Otra opción:

if not (value.hour or value.minute or value.second):
    # do stuff
-1
Ned Batchelder 14 sep. 2009 a las 20:25

Para python 3.5 y superior:

if value.hour == 0 and value.minute == 0 and value.second == 0 and value.microsecond == 0:
  # do stuff

Para python inferior a 3.5:

if not value.time():
  # do stuff

Explicación: la evaluación booleana de una instancia datetime.time se cambió en Python 3.5:

En contextos booleanos, un objeto de tiempo siempre se considera verdadero.

Cambiado en la versión 3.5: antes de Python 3.5, un objeto de tiempo se consideraba falso si representaba la medianoche en UTC. Este comportamiento se consideró oscuro y propenso a errores y se ha eliminado en Python 3.5. Ver bpo-13936 para más detalles.

4
Community 20 jun. 2020 a las 09:12

No veo nada malo con su método, pero podría compararlo con un objeto de tiempo 'a cero'.

someDateTime = datetime.datetime(2009, 4, 6, 0, 0)
someDateTime.time() == datetime.time(0)
6
wim 9 dic. 2020 a las 07:35