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

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

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

Основное решение: модули datetime и time

Для получения текущего момента времени в Python применяется модуль datetime из стандартной библиотеки. Самый простой и эффективный способ - вызов datetime.datetime.now(), который возвращает объект типа datetime, содержащий локальные дату и время, включая микросекунды. Если нужна только дата, используется datetime.date.today(). Модуль time предоставляет функцию time.time(), возвращающую Unix-время (количество секунд с 1 января 1970 года).

from datetime import datetime, date

now = datetime.now()
today = date.today()
print(now, today)

Python date day (компоненты даты)

2025-01-15 14:32:07.123456 2025-01-15

Python datetime date (модуль datetime)

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

Используется метод date.today() или datetime.now().date(). Первый удобнее, если требуется только календарная дата.

from datetime import date

current_date = date.today()
print(f'Сегодня {current_date}')

Python string to date (преобразование строки в дату)

Сегодня 2025-01-15

Python вывести время (вывод текущего времени в python)

Проблема: при работе с датами без учёта часового пояса результат может отличаться от ожидаемого, если программа запускается в полночь по UTC, а локальный часовой пояс смещён. Решение - всегда явно указывать часовой пояс, если критично.

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

Объект datetime содержит атрибут .time(), возвращающий объект time. Альтернатива - datetime.now().time().

from datetime import datetime

current_time = datetime.now().time()
print(f'Сейчас {current_time}')

Python вывести год (вывод текущего года в python)

Сейчас 14:32:07.123456

Python вывести дату (вывести дату в python)

Возможна ошибка, если программа ожидает время с микросекундами, а они не нужны. Для усечения до секунд используется замена:
current_time.replace(microsecond=0)

Как получить текущее время в формате UTC?

Использование datetime.utcnow() устарело (deprecated с Python 3.12). Правильный способ - datetime.now(timezone.utc) из модуля datetime.timezone.

from datetime import datetime, timezone

utc_now = datetime.now(timezone.utc)
print(utc_now)

Python разница времени (вычисление разницы между датами и временем в python)

2025-01-15 11:32:07.123456+00:00

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

Ошибка: datetime.utcnow() возвращает наивный объект (без часового пояса). Это может привести к некорректным расчётам. Рекомендуется всегда использовать aware-объекты с указанием timezone.

Как получить текущее время с учётом произвольного часового пояса?

Для работы с часовыми поясами используется модуль zoneinfo (Python 3.9+) или сторонний pytz. Пример для Москвы (UTC+3):

from datetime import datetime
from zoneinfo import ZoneInfo

moscow_tz = ZoneInfo('Europe/Moscow')
now_moscow = datetime.now(moscow_tz)
print(now_moscow)
2025-01-15 17:32:07.123456+03:00

Типичная ошибка - путаница между наивным и aware временем. При сравнении объектов с разными часовыми поясами Python генерирует TypeError. Решение - все операции выполнять над объектами с одинаковым типом (оба naive или оба aware).

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

Функция time.time() возвращает float-число секунд с эпохи. Аналогичный результат даёт метод .timestamp() у объекта datetime, но он работает только с aware-объектами.

import time

ts = time.time()
print(ts)
1736938327.123456
from datetime import datetime, timezone

now_aware = datetime.now(timezone.utc)
print(now_aware.timestamp())
1736938327.123456

Проблема: datetime.now().timestamp() для наивного объекта предполагает локальный часовой пояс, что может дать неверный результат, если локаль не совпадает с UTC. Всегда используйте aware-объекты или time.time() для однозначности.

Как отформатировать текущую дату и время в строку?

Метод strftime() преобразует datetime в строку по заданному формату. Коды формата стандартны (%Y, %m, %d, %H, %M, %S).

from datetime import datetime

now = datetime.now()
formatted = now.strftime('%d.%m.%Y %H:%M:%S')
print(formatted)
15.01.2025 14:32:07

Ошибки: неправильный регистр символов (например, %y вместо %Y). Для локализации используется модуль locale.

Как получить отдельные компоненты текущей даты (год, месяц, день)?

Атрибуты .year, .month, .day объекта date или datetime предоставляют нужные значения.

from datetime import datetime

now = datetime.now()
print(now.year, now.month, now.day)
2025 1 15

Особенность: .month возвращает число от 1 до 12, не имя месяца. Для получения названия используется strftime('%B') или работа с модулем calendar.

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

Получение текущей даты с микросекундами и разными уровнями точности

Иногда требуется получить время с точностью до микросекунд или, наоборот, только до секунд. Можно создать новый объект datetime с округлёнными значениями.

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

now = datetime.now(timezone.utc)
with_micro = now
without_micro = now.replace(microsecond=0)
only_date = now.date()
print(f'С микросекундами: {with_micro}')
print(f'Без микросекунд: {without_micro}')
print(f'Только дата: {only_date}')
С микросекундами: 2025-01-15 11:32:07.123456+00:00
Без микросекунд: 2025-01-15 11:32:07+00:00
Только дата: 2025-01-15

Использование модуля calendar для получения дня недели и начала недели

Метод weekday() возвращает номер дня недели (0 – понедельник). Для расчёта даты начала текущей недели используется timedelta.

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

today = datetime.now().date()
weekday = today.weekday() # 0 = понедельник
monday = today - timedelta(days=weekday)
print(f'Сегодня: {today} (день недели {weekday})')
print(f'Понедельник этой недели: {monday}')
# Получение названия дня недели по-русски (требуется установка locale)
import locale
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')
day_name = today.strftime('%A')
print(f'Название дня: {day_name}')
Сегодня: 2025-01-15 (день недели 2)
Понедельник этой недели: 2025-01-13
Название дня: среда

Комбинирование текущей даты с произвольным временем

Иногда нужно получить объект datetime, у которого дата текущая, а время задано вручную. Это делает метод combine().

Пример
from datetime import datetime, date, time

today = date.today()
arbitrary_time = time(9, 15, 0)
combined = datetime.combine(today, arbitrary_time)
print(combined)
2025-01-15 09:15:00

Вычисление даты следующего дня, недели, месяца с помощью timedelta

Операции сдвига дат выполняются через сложение/вычитание объектов timedelta. Для сдвига на месяц проще использовать dateutil.relativedelta, но в рамках стандартной библиотеки можно заменить день на первый день следующего месяца через calendar.

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

today = date.today()

# Следующий день
tomorrow = today + timedelta(days=1)

# Следующая неделя
next_week = today + timedelta(weeks=1)

# Первый день следующего месяца (стандартными средствами)
month = today.month
year = today.year
if month == 12:
next_month_first = date(year + 1, 1, 1)
else:
next_month_first = date(year, month + 1, 1)

print(f'Завтра: {tomorrow}')
print(f'Через неделю: {next_week}')
print(f'Первый день следующего месяца: {next_month_first}')
Завтра: 2025-01-16
Через неделю: 2025-01-22
Первый день следующего месяца: 2025-02-01

Получение текущего времени в нескольких часовых поясах одновременно

Модуль zoneinfo позволяет легко получить время для любого часового пояса.

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

tz_moscow = ZoneInfo('Europe/Moscow')
tz_newyork = ZoneInfo('America/New_York')
tz_tokyo = ZoneInfo('Asia/Tokyo')

now_utc = datetime.now(ZoneInfo('UTC'))
now_moscow = now_utc.astimezone(tz_moscow)
now_newyork = now_utc.astimezone(tz_newyork)
now_tokyo = now_utc.astimezone(tz_tokyo)

print(f'UTC: {now_utc}')
print(f'Москва: {now_moscow}')
print(f'Нью-Йорк: {now_newyork}')
print(f'Токио: {now_tokyo}')
UTC:      2025-01-15 11:32:07.123456+00:00
Москва: 2025-01-15 14:32:07.123456+03:00
Нью-Йорк: 2025-01-15 06:32:07.123456-05:00
Токио: 2025-01-15 20:32:07.123456+09:00

Измерение производительности участков кода с помощью time.perf_counter

Для замера времени выполнения без привязки к системным часам используется perf_counter (наивысшая точность).

Пример
import time

def heavy_func():
total = 0
for i in range(1000000):
total += i ** 2
return total

start = time.perf_counter()
result = heavy_func()
end = time.perf_counter()
print(f'Результат: {result}')
print(f'Время выполнения: {end - start:.6f} секунд')
Результат: 333332833333500000
Время выполнения: 0.045123 секунд

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

En
Python текущая дата и время (python)