Программа курса:
Сравнение объектов 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())
# False
print(d >= datetime(2023, 9, 7).date())
# TrueКогда вы преобразовываете объект datetime в date информация о часах минутах и секундах исчезает, остается только дни, месяцы и года.
Paws
,Предпоследний пример
print(d == datetime(2023, 9, 7).date()) # True
Это #False, либо опечатка 2024 а не 2023
admin
,Paws, Исправил