2011-06-20 7 views

Odpowiedz

91

Jeśli chcesz po prostu porównać daty,

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

Albo, oczywiście,

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

Jeśli chcesz sprawdzić, czy są one samo daty.

The documentation jest zazwyczaj pomocna. Jest to również zwykle pierwszy wynik Google dla python thing_i_have_a_question_about. Chyba, że ​​twoje pytanie dotyczy funkcji/modułu o nazwie "wąż".

Zasadniczo moduł datetime posiada trzy rodzaje do przechowywania punkt w czasie:

  • date na rok, miesiąc, dzień miesiąca
  • time na godziny, minuty, sekundy, mikrosekund, informacji strefy czasowej
  • datetime łączy w sobie datę i godzinę. Ma metody date() i time(), aby uzyskać odpowiednie obiekty date i time i istnieje przydatna funkcja combine do łączenia date i time w datetime.
23
  • Jeśli trzeba porównać jedyny dzień wartości miesięcznego niż można użyć następującego kodu:

    if yourdate.day == datetime.today().day: 
        # do something 
    
  • Jeśli trzeba sprawdzić, że różnica między dwoma datami jest dopuszczalne wtedy można użyć timedelta:

    if (datetime.today() - yourdate).days == 0: 
        #do something 
    
  • A jeśli chcesz porównać datę udział wyłącznie niż można po prostu użyć:

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

Zauważ, że timedelta ma następujący format:

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

dzięki czemu są w stanie sprawdzić diff w dni, sekundy, milisekundy, minutach i tak dalej w zależności od tego, czego naprawdę potrzebujesz:

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

W twoim przypadku, kiedy trzeba sprawdzić, czy dwie daty są dokładnie takie same, można użyć timedelta (0):

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

'.day' jest od dnia -miesiąc. Tak więc 12 sierpnia jest "równy" 12 grudnia, używając pierwszego fragmentu kodu. Prawdopodobnie nie jest to zachowanie, które OP chce. – trutheality

+0

@trutheality - tak, zacząłem pisać odpowiedź zanim pytanie zostało zmienione, więc nie byłem w stanie zrozumieć, czego dokładnie potrzebuje, dlatego udostępniłem kilka opcji dla tego –

+0

Szybka uwaga: obiekty datetime mają atrybut o nazwie " obiekty day '(no' s ') i timedelta mają atrybut o nazwie' days '(z literą' s '), na wypadek gdyby ludzie poczuli się oszołomieni tym, dlaczego ich składnia nie działa. –

2

można ustawić godziny, minuty, sekundy i mikrosekund na cokolwiek chcesz

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

ale odpowiedź trutheality jest prawdopodobnie najlepiej, gdy wszystkie są równe zeru i można po prostu porównać .date() sekundowej czasy

Może to szybciej, choć jeśli trzeba porównać setki datetimes ponieważ trzeba tylko zrobić replace() raz vs setki zaproszeń do date()

+0

Głosowałbym za tym, jeśli nie wymagałby mutacji. Możesz jednak dostosować tę metodę, tworząc klon porównywanych obiektów datetime, a następnie zmodyfikuj je, usuwając pola z rozdzielczością w ramach dnia wolnego, a następnie porównaj kopie. – ninjagecko

+1

@ninja, nie mutuje. replace() zwraca nowy obiekt datetime, na przykład str.replace() –

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

Trzeba porównać stosując .date(), ale zostawię tę metodę jako przykład w przypadku, gdy jeden chciał, na przykład, porównanie rzeczy przez miesiąc lub przez minutę, itp

Powiązane problemy