Текущая дата в Python: практическое руководство
Основные способы получения текущей даты
Стандартный и наиболее эффективный вариант
Для получения только сегодняшней даты (без времени) используется метод date.today() из модуля datetime. Он возвращает объект datetime.date, содержащий год, месяц и день. Никаких дополнительных аргументов не требуется.
from datetime import date
today = date.today()
print(today) # например, 2025-03-14Python текущая дата (получение текущей даты в python)
Если требуется получить текущую дату вместе с временем, можно воспользоваться datetime.now() и затем извлечь дату через .date().
from datetime import datetime
now = datetime.now()
today = now.date()
print(today) # 2025-03-14
Как получить текущую дату, используя модуль time?
Модуль time предоставляет функцию localtime(), которая возвращает структуру struct_time. Из неё можно извлечь год, месяц, день и сформировать объект date.
import time
from datetime import date
t = time.localtime()
today = date(t.tm_year, t.tm_mon, t.tm_mday)
print(today)
Как получить дату из времени в секундах (Unix timestamp)?
Функция time.gmtime() или localtime() принимает timestamp. Если аргумент не указан, используется текущее время.
import time
from datetime import date
ts = time.time()
t = time.gmtime(ts) # или localtime
today = date(t.tm_year, t.tm_mon, t.tm_mday)
print(today)
Есть ли способ получить дату через модуль calendar?
Модуль calendar сам не возвращает текущую дату, но можно использовать его вместе с time или datetime для локальных преобразований. Например, узнать день недели или количество дней в месяце текущей даты. Непосредственно получить текущую дату через calendar не получится – это вспомогательный инструмент.
Типичные ошибки и способы их решения
- Путаница между date.today() и datetime.today():
datetime.today()возвращает объектdatetimeбез часового пояса, тогда какdate.today()– только дату. Если случайно вызватьdatetime.today()и ожидать объектdate, возникнет ошибка при дальнейшем использовании (например, при сравнении сdate). Решение: всегда явно указывать тип возвращаемого значения. - Проблемы с часовыми поясами:
date.today()иdatetime.now()используют системное время, которое может не совпадать с нужным часовым поясом. Для работы с конкретным поясом следует использоватьdatetime.now(timezone)из модуляzoneinfo(Python 3.9+) или стороннюю библиотекуpytz. Пример:
from datetime import datetime, timezone
now_utc = datetime.now(timezone.utc)
today_utc = now_utc.date()
print(today_utc)
strftime('%x')) результат может отличаться от ожидаемого. Рекомендуется использовать locale модуль для установки нужной локали.Цели и случаи использования каждого варианта
date.today()– для операций, где требуется только календарная дата (журналы, отчёты, даты рождения).datetime.now().date()– когда вместе с датой нужно и время, но потом дата выделяется отдельно.time.localtime()– если проект уже использует модульtimeи нет необходимости подключатьdatetime, или для низкоуровневой работы с timestamp.
Расширенные примеры работы с текущей датой
Пример 1. Получение даты в разных часовых поясах
Для этого используем zoneinfo (доступен с Python 3.9). В более старых версиях можно применить pytz.
from datetime import datetime
from zoneinfo import ZoneInfo
# Москва (UTC+3)
moscow = datetime.now(ZoneInfo("Europe/Moscow"))
print("Москва:", moscow.date())
# Нью-Йорк (UTC-5 зимой)
ny = datetime.now(ZoneInfo("America/New_York"))
print("Нью-Йорк:", ny.date())
# Токио (UTC+9)
tokyo = datetime.now(ZoneInfo("Asia/Tokyo"))
print("Токио:", tokyo.date())
Москва: 2025-03-14 Нью-Йорк: 2025-03-14 Токио: 2025-03-15
Пример 2. Извлечение компонентов даты и создание строкового представления
from datetime import date
today = date.today()
print("Год:", today.year)
print("Месяц:", today.month)
print("День:", today.day)
print("День недели (0=пн):", today.weekday()) # понедельник = 0
print("ISO день недели (1=пн):", today.isoweekday())
# Форматирование
formatted = today.strftime("%d.%m.%Y")
print("Формат ДД.ММ.ГГГГ:", formatted)
# Русский формат с названием месяца
import locale
locale.setlocale(locale.LC_TIME, "ru_RU.UTF-8")
print("На русском:", today.strftime("%d %B %Y"))
Год: 2025 Месяц: 3 День: 14 День недели (0=пн): 4 ISO день недели (1=пн): 5 Формат ДД.ММ.ГГГГ: 14.03.2025 На русском: 14 марта 2025
Пример 3. Сравнение дат и вычисление разницы
from datetime import date, timedelta
today = date.today()
yesterday = today - timedelta(days=1)
tomorrow = today + timedelta(days=1)
print("Вчера:", yesterday)
print("Сегодня:", today)
print("Завтра:", tomorrow)
delta = tomorrow - yesterday
print("Разница между завтра и вчера:", delta.days, "дней")
Вчера: 2025-03-13 Сегодня: 2025-03-14 Завтра: 2025-03-15 Разница между завтра и вчера: 2 дней
Пример 4. Получение первого и последнего дня текущего месяца
from datetime import date
import calendar
today = date.today()
first_day = date(today.year, today.month, 1)
last_day = date(today.year, today.month, calendar.monthrange(today.year, today.month)[1])
print("Первый день месяца:", first_day)
print("Последний день месяца:", last_day)
Первый день месяца: 2025-03-01 Последний день месяца: 2025-03-31
Пример 5. Использование timestamp для получения даты из другого момента
from datetime import date
import time
# некоторый timestamp (например, Unix-время 1 января 2025 00:00 UTC)
ts = 1735689600
t = time.gmtime(ts)
d = date(t.tm_year, t.tm_mon, t.tm_mday)
print("Дата по timestamp 1735689600:", d)
# текущий timestamp
now_ts = time.time()
t_now = time.localtime(now_ts)
d_now = date(t_now.tm_year, t_now.tm_mon, t_now.tm_mday)
print("Текущая дата через timestamp:", d_now)
Дата по timestamp 1735689600: 2025-01-01 Текущая дата через timestamp: 2025-03-14
Пример 6. Обработка дат в Pandas (если библиотека установлена)
import pandas as pd
# получить текущую дату как объект Timestamp
today_ts = pd.Timestamp.now().date()
print("Через Pandas:", today_ts)
# серия дат с сегодняшним днём
series = pd.date_range(start=today_ts, periods=5, freq='D')
print("Ближайшие 5 дней:")
print(series.date)
Через Pandas: 2025-03-14 Ближайшие 5 дней: [datetime.date(2025, 3, 14) datetime.date(2025, 3, 15) datetime.date(2025, 3, 16) datetime.date(2025, 3, 17) datetime.date(2025, 3, 18)]