Python: уроки, справочник и задачи

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

Раздел: Модули и библиотеки Python · Обновлено 31.10.2026

Текущая дата в Python получается одной строкой через date.today(), а дата вместе со временем через datetime.now(). Ниже показано, как вывести результат в привычном формате, взять время в UTC или нужном часовом поясе, получить timestamp и посчитать разницу между датами.

Как получить текущую дату и время в Python
Фото: TheresNothingOutThere / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Сегодняшняя дата через date.today()
  2. Дата и время через datetime.now()
    1. Время без микросекунд
  3. Вывод в нужном формате через strftime()
    1. Месяц по-русски
  4. UTC и часовые пояса
  5. Timestamp и модуль time
  6. Сравнение дат и подсчет дней
  7. Частые вопросы
    1. Чем date.today() отличается от datetime.now()?
    2. Как получить дату вчера или завтра?
    3. Почему время отличается от часов на сервере?
    4. Как получить номер текущей недели?

Сегодняшняя дата через date.today()

Класс date из стандартного модуля datetime хранит только год, месяц и день. Метод today() возвращает дату по локальным часам компьютера.

from datetime import date

today = date.today()
print(today)          # например: 2026-10-31
print(type(today))    # <class 'datetime.date'>
print(today.year, today.month, today.day)  # 2026 10 31

При выводе через print() дата показывается в формате ISO 8601: год, месяц и день через дефис. Это не строка, а объект: у него есть атрибуты year, month, day и методы для сравнения и вычислений. Метод weekday() вернет номер дня недели, где понедельник это 0, а воскресенье 6.

Дата и время через datetime.now()

Если кроме даты нужны часы, минуты и секунды, используйте класс datetime. Метод now() возвращает момент вызова с точностью до микросекунд.

from datetime import datetime

now = datetime.now()
print(now)         # 2026-10-31 14:05:27.318402
print(now.hour, now.minute, now.second)  # 14 5 27
print(now.date())  # 2026-10-31
print(now.time())  # 14:05:27.318402

Обратите внимание на импорт. Модуль и класс называются одинаково, поэтому при import datetime вызов пишется как datetime.datetime.now(), а при from datetime import datetime просто datetime.now(). Путаница между этими вариантами дает ошибку AttributeError: module 'datetime' has no attribute 'now'.

Время без микросекунд

Микросекунды редко нужны в логах и интерфейсе. Их можно обнулить методом replace() или сразу отформатировать строку.

from datetime import datetime

now = datetime.now().replace(microsecond=0)
print(now)                         # 2026-10-31 14:05:27
print(now.isoformat(sep=" ", timespec="minutes"))  # 2026-10-31 14:05

Вывод в нужном формате через strftime()

Метод strftime() превращает дату в строку по шаблону. Каждая директива с процентом заменяется на свою часть даты, остальные символы копируются как есть.

from datetime import datetime

now = datetime.now()
print(now.strftime("%d.%m.%Y"))        # 31.10.2026
print(now.strftime("%d.%m.%Y %H:%M"))  # 31.10.2026 14:05
print(now.strftime("%Y-%m-%d_%H-%M-%S"))  # 2026-10-31_14-05-27
print(f"{now:%d.%m.%y}")               # 31.10.26
ДирективаЗначениеПример
%dДень месяца, две цифры05
%mМесяц, две цифры10
%Y / %yГод из четырех / двух цифр2026 / 26
%H, %M, %SЧасы (00-23), минуты, секунды14, 05, 27
%A / %BНазвание дня недели / месяца по локалиSaturday / October
%jНомер дня в году304

Последний пример с f-строкой работает потому, что объекты даты поддерживают те же директивы после двоеточия. Полный список кодов и обратное преобразование строки в дату описаны в статье про strftime в Python.

Месяц по-русски

Директивы %B и %A зависят от локали системы, и на большинстве серверов выдают английские названия. Менять локаль процесса ради одной строки неудобно, проще хранить названия в своем кортеже.

from datetime import date

MONTHS = ("января", "февраля", "марта", "апреля", "мая", "июня",
          "июля", "августа", "сентября", "октября", "ноября", "декабря")

d = date(2026, 10, 31)
print(f"{d.day} {MONTHS[d.month - 1]} {d.year} г.")  # 31 октября 2026 г.

UTC и часовые пояса

Вызов datetime.now() без аргументов возвращает наивный объект: в нем нет информации о часовом поясе, только показания часов компьютера. Для серверов, логов и баз данных надежнее брать время в UTC и хранить его вместе с поясом.

from datetime import datetime, timezone
from zoneinfo import ZoneInfo

utc_now = datetime.now(timezone.utc)
print(utc_now)  # 2026-10-31 11:05:27.318402+00:00

msk = datetime.now(ZoneInfo("Europe/Moscow"))
ny = datetime.now(ZoneInfo("America/New_York"))
print(msk.strftime("%H:%M %Z"))  # 14:05 MSK
print(ny.strftime("%H:%M %Z"))   # 07:05 EDT

Метод datetime.utcnow() устарел с Python 3.12: он возвращает наивный объект, который легко принять за местное время. Используйте datetime.now(timezone.utc). Модуль zoneinfo встроен начиная с Python 3.9; на Windows ему нужна база поясов, которая ставится командой pip install tzdata. В старых проектах для той же задачи применяют сторонний модуль pytz.

Timestamp и модуль time

Для замеров и хранения часто нужен Unix timestamp: число секунд с 1 января 1970 года по UTC. Его возвращает функция time.time(), а datetime умеет переводить его туда и обратно.

import time
from datetime import datetime

ts = time.time()
print(ts)                           # 1793444727.318402
print(datetime.fromtimestamp(ts))   # 2026-10-31 14:05:27.318402
print(int(datetime.now().timestamp()))  # 1793444727

print(time.strftime("%H:%M:%S", time.localtime()))  # 14:05:27

Модуль time удобен для пауз и измерения длительности, а для календарной арифметики лучше подходит datetime. Возможности первого собраны в обзоре модуля time.

Сравнение дат и подсчет дней

Объекты даты можно сравнивать операторами <, ==, > и вычитать друг из друга. Разность дает объект timedelta, у которого есть атрибут days.

from datetime import date, timedelta

today = date(2026, 10, 31)
new_year = date(today.year + 1, 1, 1)
print((new_year - today).days)        # 62

print(today + timedelta(days=7))      # 2026-11-07
print(today - timedelta(weeks=1))     # 2026-10-24
print(today > date(2026, 1, 1))       # True

Сравнивать наивный datetime с объектом, у которого указан пояс, нельзя: Python выбросит TypeError. Подробно сложение, вычитание и перевод интервалов в часы разобраны в статье о timedelta, а все классы модуля описаны в документации datetime.

Частые вопросы

Ответы на вопросы, которые возникают при работе с текущей датой.

Чем date.today() отличается от datetime.now()?

Первый возвращает объект date только с днем, месяцем и годом. Второй возвращает datetime с часами, минутами, секундами и микросекундами. Если время не нужно, берите date.today().

Как получить дату вчера или завтра?

Прибавьте или вычтите timedelta(days=1): date.today() - timedelta(days=1) дает вчерашнюю дату с учетом смены месяца и года.

Почему время отличается от часов на сервере?

Скорее всего, сервер работает в UTC, а вы ожидаете московское время. Передайте пояс явно: datetime.now(ZoneInfo("Europe/Moscow")).

Как получить номер текущей недели?

Метод date.today().isocalendar() возвращает год, номер недели по ISO и день недели. Номер недели доступен как атрибут .week.