¿Cómo puedo verificar si una fecha es el mismo día que datetime.today ()?

88

Esta condición siempre se evalúa Trueincluso si es el mismo día porque está comparando la hora.

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

¿Cómo puedo comprobar si una fecha es el mismo día que datetime.today()?

madprops
fuente

Respuestas:

170

Si solo desea comparar fechas,

yourdatetime.date() < datetime.today().date()

O, obviamente,

yourdatetime.date() == datetime.today().date()

Si quieres comprobar que son de la misma fecha.

La documentación suele ser útil. También suele ser el primer resultado de Google para python thing_i_have_a_question_about. A menos que su pregunta sea sobre una función / módulo llamado "serpiente".

Básicamente, el datetimemódulo tiene tres tipos para almacenar un punto en el tiempo:

  • date por año, mes, día del mes
  • time por horas, minutos, segundos, microsegundos, información de zona horaria
  • datetimecombina fecha y hora. Tiene los métodos date()y time()para obtener los objetos datey correspondientes time, y hay una combinefunción útil para combinar datey timeen un datetime.
veracidad
fuente
3
"También suele ser el primer resultado de Google para python thing_i_have_a_question_about" Y a menos que alguien haya hecho una entrada SO sobre este tema, como sucedió aquí :)
reduciendo la actividad
37
  • Si necesita comparar solo el valor del día del mes, puede usar el siguiente código:

    if yourdate.day == datetime.today().day:
        # do something
    
  • Si necesita comprobar que la diferencia entre dos fechas es aceptable, puede utilizar timedelta :

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • Y si desea comparar solo la parte de la fecha, simplemente puede usar:

    from datetime import datetime, date
    if yourdatetime.date() < datetime.today().date()
        # do something
    

Tenga en cuenta que timedelta tiene el siguiente formato:

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

Por lo tanto, puede verificar la diferencia en días, segundos, mseg, minutos, etc., dependiendo de lo que realmente necesite:

from datetime import datetime
if (datetime.today() - yourdate).days == 0:
    #do something

En su caso, cuando necesite verificar que dos fechas sean exactamente iguales, puede usar timedelta (0):

from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something
Artsiom Rudzenka
fuente
1
.dayes el día del mes. Entonces, el 12 de agosto es "igual" al 12 de diciembre usando su primer fragmento de código. Probablemente ese no sea el comportamiento que quiere el OP.
Verdad
@trutheality: sí, comencé a escribir mi respuesta antes de que se editara la pregunta, por lo que no pude entender qué necesita exactamente, por eso proporciono varias opciones para esto
Artsiom Rudzenka
1
Nota rápida: los objetos de fecha y hora tienen un atributo llamado 'día' (no 's') y los objetos timedelta tienen un atributo llamado 'días' (con una 's') en caso de que las personas se encuentren confundidas con el motivo por el cual su sintaxis no funciona.
Colton Hicks
3

Puede configurar las horas, minutos, segundos y microsegundos a lo que quiera

datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)

pero la respuesta de la veracidad es probablemente la mejor cuando todos deben ser cero y puedes comparar las .date()s de los tiempos

Sin embargo, tal vez sea más rápido si tiene que comparar cientos de fechas y horas porque solo necesita hacer replace()una vez frente a cientos de llamadas paradate()

John La Rooy
fuente
Votaría por esto si no implicara una mutación. Sin embargo, puede adaptar este método creando un clon de los objetos de fecha y hora que está comparando, luego modifíquelos eliminando campos con resolución de sub-días y luego compare las copias.
ninjagecko
1
@ninja, no cambia. replace () devuelve un nuevo objeto de fecha y hora, como hace str.replace ()
John La Rooy
2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

Hay que comparar el uso .date(), pero dejo este método como ejemplo por si se quiere, por ejemplo, comparar las cosas por mes o por minuto, etc.

ninjagecko
fuente