Как я могу проверить, совпадает ли дата с datetime.today ()? - PullRequest
65 голосов
/ 20 июня 2011

Это условие всегда оценивается как True, даже если это тот же день, потому что сравнивается время.

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

Как я могу проверить, совпадает ли дата с datetime.today()?

Ответы [ 4 ]

133 голосов
/ 20 июня 2011

Если вы хотите просто сравнить даты,

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

Или, очевидно,

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

Если вы хотите проверить, что они одинаковы дата.

Документация обычно полезна.Это также обычно первый результат Google для python thing_i_have_a_question_about.Если ваш вопрос не касается функции / модуля с именем «змея».

В основном, модуль datetime имеет три типа для хранения точки во времени:

  • date длягод, месяц, день месяца
  • time для часов, минут, секунд, микросекунд, информация о часовом поясе
  • datetime объединяет дату и время.У него есть методы date() и time() для получения соответствующих объектов date и time, и есть удобная функция combine для объединения date и time в datetime.
32 голосов
/ 20 июня 2011
  • Если вам нужно сравнить только значение дня месяца, вы можете использовать следующий код:

    if yourdate.day == datetime.today().day:
        # do something
    
  • Если вам необходимо проверить разницумежду двумя датами допустимо, тогда вы можете использовать timedelta :

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • И если вы хотите сравнить только часть даты, чем вы можете просто использовать:

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

Обратите внимание, что timedelta имеет следующий формат:

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

Таким образом, вы можете проверить разницу в днях, секундах, мс, минутах и ​​т. Д. В зависимости от того, чтовам действительно нужно:

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

В вашем случае, когда вам нужно проверить, совпадают ли две даты, вы можете использовать timedelta (0):

from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something
3 голосов
/ 20 июня 2011

Вы можете установить часы, минуты, секунды и микросекунды так, как вам нравится

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

, но ответ trutheality, вероятно, лучше, когда все они равны нулю, и вы можете просто сравнить .date() s

Может быть, это быстрее, если вам нужно сравнивать сотни дат, потому что вам нужно всего лишь replace() сделать один раз против сотен вызовов date()

2 голосов
/ 20 июня 2011
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

Следует сравнивать, используя .date(), но я оставляю этот метод в качестве примера на случай, если кто-то захочет, например, сравнить вещи по месяцам или по минутам и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...