Ця умова завжди оцінюється, Trueнавіть якщо це один день, оскільки це порівняння часу.
from datetime import datetime
# ...
if date_num_posts < datetime.today():
Як я можу перевірити, чи є дата тим самим днем datetime.today()?
Ця умова завжди оцінюється, Trueнавіть якщо це один день, оскільки це порівняння часу.
from datetime import datetime
# ...
if date_num_posts < datetime.today():
Як я можу перевірити, чи є дата тим самим днем datetime.today()?
Відповіді:
Якщо ви хочете просто порівняти дати,
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.Якщо вам потрібно порівняти значення лише дня місяця, ніж ви можете використовувати наступний код:
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
.dayце день місяця. Отже, 12 серпня «дорівнює» 12 грудня, використовуючи ваш перший фрагмент коду. Це, мабуть, не та поведінка, яку хоче ОП.
Ви можете встановити години, хвилини, секунди та мікросекунди, як завгодно
datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)
але відповідь правдивості, мабуть, найкраща, коли всі вони мають бути нульовими, і ви можете просто порівняти .date()s часів
Можливо, це швидше, хоча якщо вам доведеться порівнювати сотні дат, тому що вам потрібно зробити лише replace()один раз проти сотень дзвінківdate()
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])
Слід порівнювати, використовуючи .date(), але я залишаю цей метод як приклад на випадок, якщо хотів би, наприклад, порівняти речі за місяцями чи хвилинами тощо.