Сравнение объектов date и datetime

В Python работа с объектами date и datetime часто возникает в контексте сравнения временных меток, что является ключевым аспектом обработки данных во время и датах. Операторы сравнения, такие как <, >, <=, >=, == и !=, позволяют эффективно определять относительное положение двух временных объектов.

Объекты date представляют собой только дату (год, месяц, день), тогда как datetime включает в себя и время (часы, минуты, секунды и доли секунды). При сравнении объекта date с объектом datetime, Python автоматически приводит date к полному datetime, добавляя временную составляющую с нулевыми значениями. Это означает, что date будет эквивалентен datetime с временем, установленным на полночь.

Ранее в курсе мы узнали, что два объекта date можно сравнить между собой при помощи операторов сравнения (<, <=, ==, !=, >=, >). Даты сравниваются по хронологии, меньше та дата, которая наступила раньше.

from datetime import date

date1 = date(2024, 9, 7)
date2 = date(2024, 9, 6)
date3 = date(2024, 9, 8)

print(date1 == date2)
   # False
print(date1 < date3)
    # True
print(date2 > date3)
    # False
print(date2 >= date(2024, 9, 6))   # True

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

from datetime import datetime

datetime1 = datetime(2024, 9, 7, 10, 0)
datetime2 = datetime(2024, 9, 7, 12, 0)
datetime3 = datetime(2024, 9, 7, 10, 0)

print(datetime1 == datetime2)
print(datetime1 < datetime2)
print(datetime1 >= datetime3)

print(datetime1 <= datetime(2024, 9, 7, 9, 59))
print(datetime1 != datetime(2024, 9, 7, 10, 0))
print(datetime1 == datetime(2024, 9, 7, 10, 0))

Теперь давайте научимся сравнивать между собой date и datetime, изначально эти два объекта нельзя сравнивать между собой при помощи операторов <, <=, >=, >, это приведет к исключению TypeError.

При сравнении на равенство объектов date и datetime вы всегда будете получать False. Это происходит из-за различия в типах данных и структуре объектов. Объект date представляет только дату (год, месяц и день), тогда как объект datetime представляет и дату, и время (год, месяц, день, час, минуты и секунды). Поэтому python считает их разными объектами и возвращает False при сравнении.

Правило очень простое - сравнивайте всегда одинаковые объекты. А чтобы тип объектов совпал используйте конвертацию данных. Проще всего объект datetime преобразовать в объект date при помощи одноименного метода. И тогда вы можете спокойно использовать любой из операторов сравнения:

from datetime import date, datetime

d = date(2024, 9, 7)
dt = datetime(2024, 9, 7, 10, 0)

print(d == dt.date())
    # True
print(d > dt.date())

    # False
print(d < dt.date())


    # False
print(d != dt.date())


    # False
print(d == datetime(2023, 9, 7).date())

    # True
print(d >= datetime(2023, 9, 7).date())
    # True

Когда вы преобразовываете объект datetime в date информация о часах минутах и секундах исчезает, остается только дни, месяцы и года.

 

Перейти к следующему шагу

Комментарии