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.