Come posso verificare se una data è lo stesso giorno di datetime.today ()?


89

Questa condizione viene valutata sempre Trueanche se è lo stesso giorno perché sta confrontando l'ora.

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

Come posso verificare se una data è lo stesso giorno di datetime.today()?

Risposte:


176

Se vuoi solo confrontare le date,

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

Oppure, ovviamente,

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

Se vuoi controllare che siano la stessa data.

La documentazione è generalmente utile. Di solito è anche il primo risultato di Google per python thing_i_have_a_question_about. A meno che la tua domanda non riguardi una funzione / modulo chiamato "serpente".

Fondamentalmente, il datetimemodulo ha tre tipi per memorizzare un punto nel tempo:

  • date per anno, mese, giorno del mese
  • time per ore, minuti, secondi, microsecondi, informazioni sul fuso orario
  • datetimecombina data e ora. Ha i metodi date()e time()per ottenere gli oggetti corrispondenti datee time, e c'è una comoda combinefunzione da combinare datee timein un file datetime.

3
"Di solito è anche il primo risultato di Google per python thing_i_have_a_question_about" E a meno che qualcuno non abbia inserito SO su questo argomento, come è successo qui :)
— attività di riduzione

37
  • Se è necessario confrontare solo il valore del giorno del mese, è possibile utilizzare il codice seguente:

    if yourdate.day == datetime.today().day:
        # do something
    
  • Se è necessario verificare che la differenza tra due date sia accettabile, è possibile utilizzare timedelta :

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • E se vuoi confrontare solo la parte della data, puoi semplicemente usare:

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

Nota che timedelta ha il seguente formato:

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

Quindi puoi controllare le differenze in giorni, secondi, msec, minuti e così via a seconda di ciò di cui hai veramente bisogno:

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

Nel tuo caso, quando devi controllare che due date siano esattamente uguali, puoi usare timedelta (0):

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

1
.dayè il giorno del mese. Quindi il 12 agosto è "uguale" al 12 dicembre utilizzando il primo snippet di codice. Probabilmente non è il comportamento che vuole l'OP.
— trutheality

@trutheality - sì, ho iniziato a scrivere la mia risposta prima che la domanda fosse modificata, quindi non ero in grado di capire di cosa avesse esattamente bisogno, ecco perché fornisco diverse opzioni per questo
— Artsiom Rudzenka

1
Nota rapida: gli oggetti datetime hanno un attributo chiamato 'day' (no 's') e gli oggetti timedelta hanno un attributo chiamato 'days' (con una 's') nel caso in cui le persone si trovino confuse con il motivo per cui la loro sintassi non funziona.
— Colton Hicks,

3

Puoi impostare ore, minuti, secondi e microsecondi come preferisci

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

ma la risposta di trutheality è probabilmente la migliore quando devono essere tutte pari a zero e puoi semplicemente confrontare le .date()s dei tempi

Forse è più veloce se devi confrontare centinaia di datetime perché devi solo fare replace()una volta contro centinaia di chiamate adate()


Voterei per questo se non implicasse la mutazione. È tuttavia possibile adattare questo metodo creando un clone degli oggetti datetime che si stanno confrontando, quindi modificarli rimuovendo i campi con risoluzione sub-giornaliera, quindi confrontare le copie.
— ninjagecko

1
@ninja, non muta. replace () restituisce un nuovo oggetto datetime, come str.replace ()
— John La Rooy,

2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

Si dovrebbe confrontare usando .date(), ma lascio questo metodo come esempio nel caso in cui si volesse, ad esempio, confrontare le cose per mese o per minuto, ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.