Работа с датами и временем в языке Python
Ключевые инструменты для управления временем
Основное решение: модуль datetime
Для большинства задач с датами и временем в Python оптимально использовать модуль datetime. Он включает классы datetime (дата+время), date, time, timedelta и tzinfo. Примеры:
from datetime import datetime, timedelta, date
# Текущая дата и время
now = datetime.now()
print(f'Сейчас: {now}')
# Создание конкретной даты
dt = datetime(2025, 12, 31, 23, 59, 59)
print(f'Созданная дата: {dt}')
# Форматирование
formatted = dt.strftime('%d.%m.%Y %H:%M:%S')
print(f'Форматированная: {formatted}')
# Арифметика
tomorrow = now + timedelta(days=1)
print(f'Завтра: {tomorrow}')
# Разница
diff = dt - now
print(f'До нового года: {diff.days} дней')время создания python (время создания файла/объекта в python)
Сейчас: 2025-07-15 14:30:00.123456 Созданная дата: 2025-12-31 23:59:59 Форматированная: 31.12.2025 23:59:59 Завтра: 2025-07-16 14:30:00.123456 До нового года: 168 дней
время сообщения python (время сообщения (метка времени) в python)
Возможные проблемы:
- Путаница между datetime.datetime и datetime.date. Для получения только даты используйте date.today().
- Арифметика с месяцем напрямую не поддерживается; используйте dateutil.relativedelta.
- При работе с часовыми поясами всегда локализуйте объекты.
Как получить текущую метку времени и преобразовать её в структурированное время?
Модуль time предоставляет низкоуровневые функции. time.time() возвращает Unix-метку. time.localtime() преобразует её в struct_time.
import time
ts = time.time()
local = time.localtime(ts)
print(f'Год: {local.tm_year}, месяц: {local.tm_mon}')
str_time = time.strftime('%Y-%m-%d %H:%M:%S', local)
print(str_time)
дата и время в python (работа с датой и временем в python)
Год: 2025, месяц: 7 2025-07-15 14:30:00
модуль время python (модуль time в python)
Цель: быстрые преобразования, работа с метками, замеры времени (time.sleep, time.perf_counter).
Проблема: time.time() и time.localtime() используют локальный часовой пояс. Для UTC используйте time.gmtime().
Как определить количество дней в месяце или день недели?
Модуль calendar предлагает функции для календарных расчетов.
import calendar
weekday = calendar.weekday(2025, 12, 31)
print(f'31.12.2025 - день недели {weekday}') # 0 - понедельник
days = calendar.monthrange(2025, 2)
print(f'Февраль 2025: {days[1]} дней')
is_leap = calendar.isleap(2024)
print(f'2024 високосный? {is_leap}')Python определить время (определение времени в python)
31.12.2025 - день недели 2 (среда) Февраль 2025: 28 дней 2024 високосный? True
Python время года (определение времени года по дате в python)
Цель: проверка дат, генерация календарей.
Следует помнить, что calendar.weekday использует понедельник как 0, воскресенье как 6. Для другого порядка используйте calendar.day_name.
Как работать с датами в разных часовых поясах?
Для часовых поясов применяйте pytz (или zoneinfo начиная с Python 3.9).
from datetime import datetime
import pytz
utc = pytz.utc.localize(datetime.utcnow())
moscow = pytz.timezone('Europe/Moscow')
msk = utc.astimezone(moscow)
print(f'Москва: {msk}')Python реальное время (получение реального времени в python)
Москва: 2025-07-15 17:30:00+03:00
время в секунды python (преобразование времени в секунды в python)
Цель: международные приложения, логи с корректным временем.
Ошибки: нелокализованные объекты datetime при сравнении с локализованными. Используйте localize() или replace(tzinfo=...).
Как преобразовать дату в строку и обратно?
Форматирование через strftime и разбор через strptime.
from datetime import datetime
dt = datetime.now()
formatted = dt.strftime('Сегодня %A, %d %B %Y')
print(formatted)
date_str = '31/12/2025 23:59'
parsed = datetime.strptime(date_str, '%d/%m/%Y %H:%M')
print(parsed)Python datetime время (работа с datetime в python)
Сегодня Tuesday, 15 July 2025 2025-12-31 23:59:00
Python 3 время (работа с временем в python 3)
Цель: пользовательский ввод/вывод, сериализация.
Проблемы: неверные коды формата, зависимость от локали. Для русских названий установите локаль: import locale; locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8').
Как вычислить разницу между датами?
Операции с timedelta.
from datetime import datetime, timedelta
start = datetime(2025, 1, 1)
end = datetime(2025, 12, 31)
diff = end - start
print(f'Разница: {diff.days} дней')
new_date = start + timedelta(weeks=10)
print(f'Через 10 недель: {new_date}')Python задать время (установка времени в python)
Разница: 364 дня Через 10 недель: 2025-03-12
Python функция времени (функции для работы со временем в python)
Цель: расчет сроков, интервалов.
timedelta не поддерживает месяцы; для этого используйте dateutil.relativedelta.
Как парсить даты из строк произвольного формата?
Библиотека dateutil умеет распознавать множество форматов.
from dateutil import parser
date_str = 'December 31, 2025 11:59 PM'
parsed = parser.parse(date_str)
print(parsed)
2025-12-31 23:59:00
Цель: импорт данных, гибкий парсинг.
Неоднозначные строки (например, 01/02/2025) могут интерпретироваться по-разному. dateutil по умолчанию использует MM/DD/YYYY. Можно указать dayfirst=True.
Расширенные примеры использования
Генерация списка дат между двумя датами
Для создания последовательности дат можно использовать цикл с timedelta.
from datetime import datetime, timedelta
start = datetime(2025, 1, 1)
end = datetime(2025, 1, 10)
dates = []
current = start
while current <= end:
dates.append(current)
current += timedelta(days=1)
for d in dates:
print(d.date())
2025-01-01 2025-01-02 ... 2025-01-10
Добавление месяцев с учетом конца месяца
Модуль dateutil позволяет добавлять месяцы, корректно обрабатывая переполнение (например, 31 января + 1 месяц = 28 февраля).
from datetime import datetime
from dateutil.relativedelta import relativedelta
dt = datetime(2025, 1, 31)
next_month = dt + relativedelta(months=1)
print(next_month) # 2025-02-28
2025-02-28 00:00:00
Парсинг и форматирование ISO 8601
Начиная с Python 3.7, поддерживается fromisoformat и isoformat для часовых поясов.
from datetime import datetime, timezone
dt = datetime(2025, 6, 15, 12, 0, 0, tzinfo=timezone.utc)
iso = dt.isoformat()
print(iso)
parsed = datetime.fromisoformat('2025-06-15T12:00:00+05:00')
print(parsed)
2025-06-15T12:00:00+00:00 2025-06-15 12:00:00+05:00
Измерение времени выполнения кода
Функция time.perf_counter предоставляет высокоточный таймер.
import time
start = time.perf_counter()
sum(range(1000000))
end = time.perf_counter()
print(f'Время: {end - start:.6f} секунд')
Время: 0.043210 секунд (примерно)
Печать календаря на месяц
Класс TextCalendar из модуля calendar выводит календарь в текстовом виде.
import calendar
cal = calendar.TextCalendar()
month_cal = cal.formatmonth(2025, 7)
print(month_cal)
July 2025
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Преобразование даты в юлианскую
Для астрономических расчетов может потребоваться юлианская дата. Ниже приведена реализация без внешних библиотек.
from datetime import datetime, timedelta
def to_julian(dt):
a = (14 - dt.month) // 12
y = dt.year + 4800 - a
m = dt.month + 12*a - 3
jd = dt.day + (153*m + 2)//5 + 365*y + y//4 - y//100 + y//400 - 32045
return jd
dt = datetime(2025, 7, 1)
jd = to_julian(dt)
print(f'Юлианская дата для 1 июля 2025: {jd}')
Юлианская дата для 1 июля 2025: 2460892.5
Округление времени до ближайшего часа
Функция для округления времени вверх или вниз.
from datetime import datetime, timedelta
def round_to_hour(dt):
if dt.minute >= 30:
dt += timedelta(hours=1)
return dt.replace(minute=0, second=0, microsecond=0)
dt = datetime(2025, 7, 15, 14, 45)
rounded = round_to_hour(dt)
print(f'Исходное: {dt}, округлённое: {rounded}')
Исходное: 2025-07-15 14:45:00, округлённое: 2025-07-15 15:00:00