Работа с датами и временем в языке Python

Раздел: 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

Функции для работы со временем в Python - comments

En
Python функция времени (python)