Текущие дата и время в 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 секунд