Текущая дата и время в Python — это значения, которые возвращает функция datetime.now() из стандартного модуля datetime: объект с годом, месяцем, днем, часами, минутами, секундами и микросекундами на момент вызова. Отдельно дату берут через date.today(), а число секунд с начала эпохи Unix — через time.time().
Содержание
Ниже разберу, как получить дату и время целиком и по частям, как привести их к нужному текстовому виду, как учесть часовой пояс и как перевести момент в метку времени Unix. Примеры проверены на Python 3.14 (актуальная стабильная версия на сентябрь 2026); код работает и на Python 3.9 и новее.
Быстрый старт: datetime.now()
Минимальный рабочий пример — импортировать класс datetime и вызвать now():
from datetime import datetime
now = datetime.now()
print(now) # напр. 2026-09-16 14:30:05.123456 (у вас будут свои значения)
print(type(now)) # <class 'datetime.datetime'>
Строка from datetime import datetime выглядит непривычно: слева модуль datetime, справа класс datetime внутри него — это разные вещи с одинаковым именем. Функция now() возвращает объект класса datetime с датой и временем на момент вызова.
Конкретный вывод у вас будет другим — секунды и микросекунды не стоят на месте. Поэтому в примерах с now() я пишу «напр.», а точные значения показываю там, где момент задан явно.
Дата, время и datetime: три разных класса
В модуле datetime три основных класса, и путать их не стоит:
| Класс | Что хранит | Пример значения |
|---|---|---|
date |
год, месяц, день | 2026-09-16 |
time |
часы, минуты, секунды, микросекунды | 14:30:05.123456 |
datetime |
дату и время вместе | 2026-09-16 14:30:05.123456 |
Объект datetime совмещает оба, поэтому из него легко достать и дату, и время по отдельности — об этом ниже.
Атрибуты доступны напрямую, каждый — обычное целое число:
from datetime import datetime
now = datetime.now()
print(now.year, now.month, now.day) # напр. 2026 9 16
print(now.hour, now.minute, now.second) # напр. 14 30 5
Только дата: date.today() и .date()
Получить текущую дату можно двумя способами. Первый — взять ее из объекта datetime методом date(). Второй — вызвать today() у класса date. Результат одинаковый:
from datetime import datetime, date
print(datetime.now().date()) # напр. 2026-09-16
print(date.today()) # напр. 2026-09-16
День недели дает метод weekday() или isoweekday(). Здесь легко ошибиться с нумерацией, поэтому запомните разницу: weekday() считает понедельник нулем, isoweekday() — единицей.
from datetime import date
d = date(2026, 9, 16) # среда
print(d.weekday()) # 2 (понедельник = 0, вторник = 1, среда = 2)
print(d.isoweekday()) # 3 (понедельник = 1)
Только время: .time()
Текущее время без даты берут методом time() у объекта datetime:
from datetime import datetime
print(datetime.now().time()) # напр. 14:30:05.123456
Возвращается объект класса time. У него тоже есть отдельные атрибуты — hour, minute, second, microsecond, если нужны части времени по отдельности.
Форматирование: strftime
print(now) выводит дату в служебном виде (ISO 8601). Для интерфейса или отчета момент обычно приводят к своему формату методом strftime(). Он принимает строку-шаблон со спецификаторами и возвращает готовую строку.
Чтобы вывод был предсказуемым, зафиксирую конкретный момент — тогда результат не зависит от того, когда вы запустите код:
from datetime import datetime
moment = datetime(2026, 9, 16, 14, 30, 5)
print(moment.strftime("%d.%m.%Y")) # 16.09.2026
print(moment.strftime("%H:%M:%S")) # 14:30:05
print(moment.strftime("%d.%m.%Y %H:%M")) # 16.09.2026 14:30
Часто используемые спецификаторы:
| Шаблон | Значение | Пример |
|---|---|---|
%Y |
год, 4 цифры | 2026 |
%m |
месяц, 2 цифры | 09 |
%d |
день, 2 цифры | 16 |
%H |
часы, 24-часовой формат | 14 |
%M |
минуты | 30 |
%S |
секунды | 05 |
Обратная операция — разобрать строку в объект datetime — делается методом strptime() с тем же языком шаблонов: datetime.strptime("16.09.2026", "%d.%m.%Y").
Другой часовой пояс
datetime.now() без аргументов возвращает «наивное» время — местное, без информации о поясе. Чтобы привязать момент к конкретной зоне, передайте пояс аргументом. С Python 3.9 для этого есть встроенный модуль zoneinfo — отдельная библиотека pytz больше не нужна:
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
msk = datetime.now(ZoneInfo("Europe/Moscow"))
print(msk.strftime("%Y-%m-%d %H:%M %Z")) # напр. 2026-09-16 14:30 MSK
utc = datetime.now(timezone.utc)
print(utc.strftime("%Y-%m-%d %H:%M %Z")) # напр. 2026-09-16 11:30 UTC
Имена поясов берутся из базы IANA (Europe/Moscow, Asia/Novosibirsk, UTC и другие). Если zoneinfo не находит базу поясов (иногда бывает на Windows), поставьте пакет tzdata командой pip install tzdata.
Отдельно отмечу: метод datetime.utcnow() из старых примеров считается устаревшим начиная с Python 3.12. Вместо него используйте datetime.now(timezone.utc) — он возвращает время UTC с явно указанным поясом.
Метка времени Unix
Метка времени Unix (Unix timestamp) — это число секунд, прошедших с начала эпохи Unix, то есть с 00:00:00 UTC 1 января 1970 года. В таком виде время хранят и передают базы данных, протоколы и логи, потому что сравнивать и вычитать одно число проще, чем разбирать дату.
Текущую метку дает функция time.time() из модуля time — это число с плавающей точкой:
import time
print(time.time()) # напр. 1789640000.123456 (секунд с 1970-01-01 UTC)
Перевести конкретный момент в метку и обратно можно средствами datetime:
from datetime import datetime, timezone
ts = datetime(2026, 9, 16, 12, 0, tzinfo=timezone.utc).timestamp()
print(ts) # 1789560000.0
print(datetime.fromtimestamp(ts, tz=timezone.utc)) # 2026-09-16 12:00:00+00:00
Для меток времени всегда задавайте пояс явно (tzinfo=timezone.utc): без него результат зависит от настроек машины, и одна и та же метка на разных серверах даст разное время.
Выводы
Текущий момент в Python получают через datetime.now(), отдельно дату — через date.today(), отдельно время — методом time(). Для вывода в нужном виде применяют strftime() с шаблоном, для часовых поясов — встроенный zoneinfo (а utcnow() больше не используют, его заменяет datetime.now(timezone.utc)). Метку времени Unix — число секунд с 1 января 1970 года — дает time.time(), и при переводе дат в метки пояс всегда задают явно.
Где это нужно на практике
Работа с датой и временем встречается почти в любой программе: отметки о создании записи в базе, расчет срока подписки, логирование событий, расписания и напоминания, замер времени выполнения кода. Умение получить текущий момент, привести его к нужному поясу и формату и перевести в метку Unix — базовый навык для бэкенда, анализа данных и автоматизации.
Освойте тему на практике
Разобраться с этим системно, вместе с остальными основами языка и практикой на реальных задачах, помогает курс Python-разработчик с нуля до Middle. Посмотреть формат занятий и темы вживую можно на открытых уроках Otus.
Смежные темы: циклы в Python, частые логические ошибки в коде.
FAQ
Чем datetime.now() отличается от datetime.today()?
Оба возвращают текущие дату и время. Разница в одном: now() умеет принять часовой пояс аргументом и вернуть время с привязкой к зоне, а today() всегда дает наивное местное время без пояса.
Как получить только год или только текущий месяц числом?
Обратитесь к атрибуту напрямую: datetime.now().year вернет год, datetime.now().month — номер месяца. Это обычные целые числа, с ними можно сразу считать.
Почему в метке времени time.time() есть дробная часть?
Функция возвращает секунды как число с плавающей точкой, и дробь — это доли секунды. Если нужна целая метка в секундах, приведите результат к int: int(time.time()).



