Текущая дата в Python: практическое руководство

Раздел: Работа с датой и временем -> стандартная библиотека datetime

Основные способы получения текущей даты

Стандартный и наиболее эффективный вариант

Для получения только сегодняшней даты (без времени) используется метод date.today() из модуля datetime. Он возвращает объект datetime.date, содержащий год, месяц и день. Никаких дополнительных аргументов не требуется.

from datetime import date

today = date.today()
print(today)  # например, 2025-03-14

Python текущая дата (получение текущей даты в 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)]

получение текущей даты в Python - comments

En
Python текущая дата (python)