
В Python объекты datetime содержат как дату, так и время. Для задач анализа данных или логирования часто требуется работать только с компонентом даты. Игнорирование времени позволяет сравнивать даты, группировать события и создавать отчеты без лишних деталей.
Метод date() возвращает объект date с годом, месяцем и днем. Этот метод безопасен при работе с локальными и UTC-временными зонами, так как извлекает только календарную часть объекта datetime.
Для работы с массивами дат в таблицах pandas применяется метод dt.date, который возвращает Series объектов date. Это упрощает фильтрацию, группировку и агрегирование данных по дням без учета времени.
Использование метода date() для получения даты
Метод date() объекта datetime возвращает только календарную часть: год, месяц и день. Пример использования:
from datetime import datetime
now = datetime.now()
today = now.date()
Метод работает как с локальным временем, так и с объектами datetime в UTC. Он сохраняет тип date, что позволяет выполнять сравнения, например today == datetime(2025, 12, 21).date(). Это важно при фильтрации записей в базах данных или списках событий.
При необходимости хранения или передачи даты без времени метод date() минимизирует ошибки округления и преобразования временных зон, так как временная часть полностью игнорируется. Он совместим с большинством библиотек для работы с датами и позволяет сохранять единообразие формата во всех частях приложения.
Метод strftime позволяет преобразовать объект datetime в строку с заданным форматом, оставляя только нужные компоненты даты. Основной синтаксис:
datetime_object.strftime(format)
Наиболее часто используемые форматы:
- %Y – год в четырехзначном формате (например, 2025)
- %m – месяц с ведущим нулем (01–12)
- %d – день месяца с ведущим нулем (01–31)
Пример практического применения:
- Импорт и создание объекта datetime:
from datetime import datetime
now = datetime.now()
- Форматирование даты в строку:
date_str = now.strftime(«%Y-%m-%d»)
- Использование в логах или при экспорте данных:
log_date = now.strftime(«%d.%m.%Y») # формат для отчетов
Преобразование datetime в строку с помощью isoformat

Метод isoformat() объекта datetime возвращает строковое представление даты и времени в формате ISO 8601. Для получения только даты можно использовать параметр timespec=’days’, который исключает временную часть.
Пример использования:
from datetime import datetime
now = datetime.now()
date_str = now.date().isoformat()
Метод isoformat() удобен при обмене данными между системами, так как формат ISO 8601 стандартизирован и поддерживается большинством библиотек. Он сохраняет точность календарной даты и предотвращает ошибки, связанные с локальными настройками формата.
Для объектов datetime с часовыми поясами использование isoformat позволяет сохранять временную зону, а при вызове date().isoformat() возвращается только календарная часть без смещения по времени.
Работа с объектами datetime при разных временных зонах
Объекты datetime могут быть naive (без информации о временной зоне) или aware (с указанием временной зоны через tzinfo). При извлечении только даты важно учитывать, что naive datetime воспринимается как локальное время, а aware – с учетом смещения UTC.
Пример перевода времени в UTC перед получением даты:
from datetime import datetime, timezone
dt_aware = datetime(2025, 12, 21, 15, 30, tzinfo=timezone.utc)
date_only = dt_aware.date()
Для локальных временных зон можно использовать библиотеку pytz или zoneinfo (Python 3.9+). Преобразование в нужную зону перед вызовом date() гарантирует корректную календарную дату:
import zoneinfo
local_tz = zoneinfo.ZoneInfo(«Europe/Moscow»)
dt_local = dt_aware.astimezone(local_tz)
date_local = dt_local.date()
Использование date() после приведения к нужной временной зоне предотвращает ошибки при сравнении дат из разных регионов или при формировании отчетов с учетом локального времени.
Извлечение даты из pandas datetime столбцов
В pandas столбцы с типом datetime64[ns] содержат дату и время. Для получения только даты используется атрибут dt.date, который возвращает Series объектов date.
Пример применения:
import pandas as pd
data = pd.DataFrame({‘timestamp’: pd.to_datetime([‘2025-12-21 14:30’, ‘2025-12-22 09:15’])})
data[‘date_only’] = data[‘timestamp’].dt.date
print(data)
Выход будет:
timestamp date_only
2025-12-21 14:30 2025-12-21
2025-12-22 09:15 2025-12-22
Использование dt.date упрощает фильтрацию по календарным датам, группировку и агрегацию без учета времени. Метод совместим с методами pandas groupby, merge и фильтрацией по маске, что делает его удобным для анализа временных рядов.
Сравнение только даты без учета времени
Для сравнения календарных дат объектов datetime используется метод date(), который исключает компонент времени. Это позволяет корректно определять совпадение дней независимо от часов, минут и секунд.
Пример сравнения двух объектов datetime:
from datetime import datetime
dt1 = datetime(2025, 12, 21, 10, 15)
dt2 = datetime(2025, 12, 21, 22, 45)
if dt1.date() == dt2.date():
При работе с pandas для сравнения по датам применяется dt.date:
data[data[‘timestamp’].dt.date == datetime(2025, 12, 21).date()]
Сравнение только даты полезно для фильтрации событий, подсчета уникальных дней, создания отчетов и агрегации данных без влияния временной части, что исключает ошибки при анализе временных рядов.
Вопрос-ответ:
Как получить только дату из объекта datetime в Python?
Для извлечения даты используется метод date(). Он возвращает объект date, содержащий год, месяц и день, без информации о времени. Пример: today = datetime.now().date() вернет текущую дату.
Чем отличается использование date() и strftime для получения даты?
Метод date() возвращает объект date, с которым можно выполнять сравнения и арифметические операции. Метод strftime преобразует дату в строку в заданном формате, например «%Y-%m-%d». Для хранения или фильтрации удобнее date(), для вывода в отчетах — strftime.
Можно ли извлечь дату из datetime в pandas столбцах?
Да, у столбцов типа datetime64[ns] есть атрибут dt.date, который возвращает Series объектов date. Это упрощает фильтрацию, группировку и сравнение дат без учета времени. Например: df[‘date_only’] = df[‘timestamp’].dt.date.
Как сравнивать даты без учета времени?
Для сравнения календарных дат двух datetime объектов используют date(). Пример: dt1.date() == dt2.date(). Это позволяет определить, принадлежат ли события одному дню, независимо от часов и минут.
Как учитывать временные зоны при извлечении даты?
Если объект datetime содержит информацию о временной зоне (aware), перед вызовом date() его следует привести к нужной зоне через astimezone. Для naive datetime timezone не учитывается, и метод возвращает дату локального времени.
