Как получить текущую дату в Python: руководство с примерами

Раздел: Стандартная библиотека Python -> Datetime

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

В стандартной библиотеке Python для работы с датами и временем предназначен модуль datetime. Он предоставляет классы datetime.datetime, datetime.date, datetime.time и другие. Получение текущей даты и времени является одной из самых частых операций. В этой части рассмотрены различные подходы, их преимущества и возможные проблемы.

Как получить текущую дату и время с помощью модуля datetime?

Наиболее распространенный способ - использовать метод datetime.now() или datetime.today(). Оба возвращают объект datetime, содержащий локальную дату и время.

from datetime import datetime

now = datetime.now()
print('Текущая дата и время:', now)
print('Тип объекта:', type(now))

Python получить год (получение текущего года в python)

Текущая дата и время: 2025-04-05 14:32:10.123456
Тип объекта: <class 'datetime.datetime'>

Python получить дату (получение текущей даты в python)

Метод datetime.now() принимает необязательный аргумент tz (часовой пояс). Если tz не указан, используется локальный часовой пояс системы. Метод datetime.today() не поддерживает аргумент tz и всегда возвращает локальное время без информации о часовом поясе.

Возможные проблемы и ошибки:

  • Забытый импорт модуля datetime - возникает NameError. Всегда проверяется наличие строки from datetime import datetime в начале кода.
  • Путаница между классом datetime.datetime и модулем datetime. Если написать import datetime, то для вызова now() нужно писать datetime.datetime.now(). Рекомендуется импортировать класс явно.
  • Метод datetime.now() возвращает наивный (без часового пояса) объект, если аргумент tz не передан. Это может привести к ошибкам при сравнении с timezone-aware объектами.

Как получить только текущую дату без времени?

Если требуется только дата (год, месяц, день), используется метод date.today() из класса date.

from datetime import date

today = date.today()
print('Сегодняшняя дата:', today)
print('Год:', today.year)
Сегодняшняя дата: 2025-04-05
Год: 2025

Типичная ошибка:

Попытка вызвать today() на объекте datetime.datetime - такой метод есть, но он возвращает время начала эпохи (полночь) для указанной даты, а не текущую дату. Следует использовать date.today().

Как получить текущую дату в виде строки в нужном формате?

Метод strftime() преобразует объект даты/времени в строку по заданному формату.

from datetime import datetime

now = datetime.now()
formatted = now.strftime('%Y-%m-%d %H:%M:%S')
print('Отформатированная дата:', formatted)

# Другие примеры форматирования:
print('Дата в формате DD.MM.YYYY:', now.strftime('%d.%m.%Y'))
print('День недели:', now.strftime('%A'))
Отформатированная дата: 2025-04-05 14:32:10
Дата в формате DD.MM.YYYY: 05.04.2025
День недели: Saturday

Распространенные ошибки:

  • Неверные коды формата (например, %Y для года с веком, %y для года без века). Необходимо сверяться с документацией.
  • Локаль системы может влиять на вывод названий дней и месяцев. Для русского языка требуется указать локаль locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8').

Как получить текущую дату в UTC (всемирное координированное время)?

Для получения текущего времени в UTC используется метод datetime.now(timezone.utc) или datetime.utcnow() (устарел с Python 3.12). Рекомендуется первый вариант.

from datetime import datetime, timezone

utc_now = datetime.now(timezone.utc)
print('Текущее время UTC:', utc_now)
print('Часовой пояс:', utc_now.tzinfo)
Текущее время UTC: 2025-04-05 11:32:10.123456+00:00
Часовой пояс: UTC

Проблема:

Метод datetime.utcnow() возвращает наивный объект, что может вызывать путаницу. Начиная с Python 3.12 он помечен как deprecated. Поэтому используется datetime.now(timezone.utc).

Как получить текущую дату с помощью модуля time?

Модуль time также предоставляет функции для работы с временем. Функция localtime() возвращает структуру времени, из которой можно извлечь дату.

import time

local_time = time.localtime()
print('Текущая дата (time):', local_time)
print('Год:', local_time.tm_year)
print('Месяц:', local_time.tm_mon)
print('День:', local_time.tm_mday)
Текущая дата (time): time.struct_time(tm_year=2025, tm_mon=4, tm_mday=5, tm_hour=14, tm_min=32, tm_sec=10, tm_wday=5, tm_yday=95, tm_isdst=0)
Год: 2025
Месяц: 4
День: 5

Недостаток:

Структура struct_time менее удобна для операций с датами (сравнение, арифметика) по сравнению с объектами datetime.

Как получить текущую метку времени Unix (timestamp)?

Функция time.time() возвращает количество секунд с эпохи (1 января 1970 г. UTC).

import time

ts = time.time()
print('Текущий timestamp:', ts)

# Обратное преобразование в datetime
from datetime import datetime
dt_from_ts = datetime.fromtimestamp(ts)
print('Из timestamp:', dt_from_ts)
Текущий timestamp: 1743845530.123456
Из timestamp: 2025-04-05 14:32:10.123456

Проблема:

Функция datetime.fromtimestamp() по умолчанию интерпретирует timestamp как местное время. Для UTC используется datetime.utcfromtimestamp() (устарел) или datetime.fromtimestamp(ts, tz=timezone.utc).

Расширенные примеры работы с текущей датой

Здесь представлены более сложные и редко встречающиеся сценарии получения и обработки текущей даты и времени.

Получение текущей даты с точностью до микросекунд

Объект datetime по умолчанию содержит микросекунды. Можно извлечь их отдельно.

Пример
from datetime import datetime

now = datetime.now()
microseconds = now.microsecond
print('Микросекунды:', microseconds)
Микросекунды: 123456

Получение текущей даты в часовом поясе (с использованием zoneinfo)

Начиная с Python 3.9, для работы с часовыми поясами используется модуль zoneinfo.

Пример
from datetime import datetime
from zoneinfo import ZoneInfo

tz = ZoneInfo('Europe/Moscow')
moscow_now = datetime.now(tz)
print('Московское время:', moscow_now)
print('Смещение UTC:', moscow_now.utcoffset())
Московское время: 2025-04-05 16:32:10.123456+03:00
Смещение UTC: 3:00:00

Получение начала текущего дня, месяца и года

Заменить компоненты времени на нули при помощи replace().

Пример
from datetime import datetime

now = datetime.now()
start_of_day = now.replace(hour=0, minute=0, second=0, microsecond=0)
start_of_month = now.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
start_of_year = now.replace(month=1, day=1, hour=0, minute=0, second=0, microsecond=0)
print('Начало дня:', start_of_day)
print('Начало месяца:', start_of_month)
print('Начало года:', start_of_year)
Начало дня: 2025-04-05 00:00:00
Начало месяца: 2025-04-01 00:00:00
Начало года: 2025-01-01 00:00:00

Получение текущей даты в формате ISO 8601

Метод isoformat() возвращает строку в международном формате.

Пример
from datetime import datetime, timezone

now_utc = datetime.now(timezone.utc)
iso_str = now_utc.isoformat()
print('ISO 8601:', iso_str)

# С указанием разделителя 'T'
print('С явным T:', now_utc.isoformat(sep='T'))
ISO 8601: 2025-04-05T11:32:10.123456+00:00
С явным T: 2025-04-05T11:32:10.123456+00:00

Вычисление разницы между текущей датой и другой датой

Объекты datetime можно вычитать, получая timedelta.

Пример
from datetime import datetime, timedelta

now = datetime.now()
future = now + timedelta(days=10)
diff = future - now
print('Через 10 дней:', diff.days, 'дней,', diff.seconds, 'секунд')

# Количество секунд с начала эпохи
epoch = datetime(1970, 1, 1)
delta = now - epoch
print('Секунд с эпохи:', delta.total_seconds())
Через 10 дней: 10 дней, 0 секунд
Секунд с эпохи: 1743845530.123456

Получение даты первого дня текущей недели (понедельник)

Используется weekday() (понедельник = 0).

Пример
from datetime import datetime, timedelta

now = datetime.now()
# weekday returns 0 for Monday, 1 for Tuesday, etc.
monday = now - timedelta(days=now.weekday())
print('Понедельник этой недели:', monday.date())
Понедельник этой недели: 2025-04-01

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

En
Python получить дату (python)