
Модуль datetime входит в стандартную библиотеку Python и предоставляет классы для создания, сравнения и преобразования временных объектов. datetime.datetime объединяет дату и время в одном объекте, поддерживает арифметику и точность до микросекунд. Создание объекта: datetime.datetime(2025, 5, 7, 14, 30).
Для вычислений временных интервалов используется timedelta. Прибавление и вычитание временных значений выполняется напрямую: now + datetime.timedelta(days=10). Это применимо для расчёта сроков, таймеров и отложенных событий. Поддерживаются дни, секунды, минуты, недели, а также отрицательные значения.
Извлечение компонентов осуществляется через свойства объектов: dt.year, dt.month, dt.weekday(). Это важно при построении логики на основе календарных данных. Метод isoformat() преобразует дату во встроенный ISO 8601 формат, совместимый с большинством API и СУБД.
С версии Python 3.9 рекомендуется использовать модуль zoneinfo вместо устаревших решений для часовых поясов. Подключение: from zoneinfo import ZoneInfo. Пример: datetime.datetime.now(ZoneInfo("Asia/Yekaterinburg")). Это обеспечивает корректность времени при работе в разных регионах, включая автоматическое учёты переходов на летнее время.
Парсинг и форматирование реализуются через strptime и strftime. Формат %d.%m.%Y %H:%M позволяет явно задать шаблон строки. Ошибки при несоответствии шаблона вызывают исключения, что требует строгого контроля входных данных при взаимодействии с внешними источниками.
Как получить текущие дату и время в Python

Для получения текущих даты и времени используется модуль datetime, встроенный в стандартную библиотеку. Основной метод – datetime.now(), который возвращает объект datetime с текущими значениями даты и времени по системным настройкам.
Пример получения текущего момента времени:
from datetime import datetime
now = datetime.now()
print(now)
Если требуется строковое представление, применяют метод strftime():
print(now.strftime("%Y-%m-%d %H:%M:%S"))
Для получения только текущей даты – date.today():
from datetime import date
today = date.today()
print(today)
Если необходим только текущее время без даты – datetime.now().time():
current_time = datetime.now().time()
print(current_time)
Модуль time также предоставляет функцию time.localtime() с аналогичной целью, но возвращает структуру struct_time:
import time
local_time = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time))
При работе с часовыми поясами рекомендуется использовать модуль zoneinfo (Python 3.9+):
from datetime import datetime
from zoneinfo import ZoneInfo
dt = datetime.now(ZoneInfo("Europe/Moscow"))
print(dt)
Разница между datetime, date и time: когда что использовать
datetime, date и time – три разных типа из модуля datetime, каждый из которых служит своей цели и должен использоваться строго по назначению.
date – для представления только календарной даты: год, месяц, день. Без времени и временной зоны. Используется, когда требуется хранить или сравнивать даты без привязки ко времени суток. Примеры: дата рождения, дата подписания договора, крайний срок сдачи работы.
time – только время: часы, минуты, секунды, микросекунды. Не содержит информации о дате. Полезен для описания повторяющихся событий в пределах суток. Применяется, например, для задания расписания (время открытия, время отправки уведомлений), без необходимости указывать конкретный день.
datetime – комбинация даты и времени. Включает год, месяц, день, часы, минуты, секунды, микросекунды и опционально временную зону. Необходим, когда нужно работать с точной временной меткой. Используется для логирования событий, сортировки по времени, подсчёта разницы между временными точками.
Примеры создания:
from datetime import date, time, datetime
d = date(2025, 5, 7)
t = time(14, 30)
dt = datetime(2025, 5, 7, 14, 30)
Выбор зависит от задачи:
- Если нужно хранить только дату –
date. - Если важна только часть времени суток –
time. - Если нужна полная временная точка –
datetime.
Форматирование даты и времени с использованием strftime
Функция strftime() из модуля datetime используется для преобразования объекта даты и времени в строку по заданному формату. Она вызывается у экземпляров datetime, date или time.
Каждый формат задаётся с помощью специальных спецификаторов. Например, %Y – четырёхзначный год, %m – номер месяца с ведущим нулём, %d – день месяца, %H – час в 24-часовом формате, %M – минуты, %S – секунды.
Чтобы вывести день недели, применяют %A для полного названия (например, «Среда») или %a для краткого («Ср»). Месяцы аналогично форматируются с помощью %B и %b.
Для генерации ISO-8601 даты вручную применяется strftime('%Y-%m-%dT%H:%M:%S'). Это удобно при подготовке данных для API или логов.
Следует избегать неоднозначных форматов (например, %x), так как они зависят от текущей локали и могут давать разный результат на разных системах.
Форматирование с strftime() эффективно для представления даты и времени в человекочитаемом виде, отчётах и генерации временных меток в строковом формате.
Разбор строки в объект datetime с помощью strptime
Функция datetime.strptime() используется для преобразования строкового представления даты и времени в объект datetime.datetime. Она принимает два аргумента: строку и формат, соответствующий этой строке. Формат указывается с использованием специальных кодов, таких как %Y для четырёхзначного года, %m для месяца, %d для дня, %H для часа в 24-часовом формате и т.д.
Например, чтобы разобрать строку "2025-05-07 14:30", используйте: datetime.strptime("2025-05-07 14:30", "%Y-%m-%d %H:%M"). Несовпадение между строкой и форматом вызовет исключение ValueError, поэтому точность формата критична.
Если входные данные могут иметь переменный формат, предварительно требуется валидация или нормализация строки. strptime() чувствителен к ведущим нулям: "07" корректно распознаётся с %d, но "7" тоже допустим. Однако "2025-5-7" не подойдёт под формат %Y-%m-%d.
Формат %z позволяет учитывать временную зону в виде смещения от UTC, например "+0300". Для корректного использования %z входная строка должна строго соответствовать шаблону: "2025-05-07 14:30 +0300" – формат "%Y-%m-%d %H:%M %z".
Формат %a и %A (аббревиатура и полное название дня недели), %b и %B (месяц) зависят от текущей локали. При использовании названий месяцев и дней недели на русском языке необходимо явно установить локаль через модуль locale.
strptime() не работает с миллисекундами. Если строка содержит доли секунды, используйте %f для микросекунд. Пример: "14:30:15.123456" соответствует формату "%H:%M:%S.%f".
Объект, полученный через strptime(), всегда имеет тип datetime.datetime, даже если строка содержит только дату. Для получения объекта datetime.date вызовите метод .date() у результата.
Работа с часовыми поясами через модуль zoneinfo
Модуль zoneinfo был добавлен в Python начиная с версии 3.9 и предоставляет возможность работы с часовыми поясами, используя базу данных IANA Time Zone Database. Это позволяет эффективно управлять временными зонами и проводить точные преобразования времени, учитывая переходы на летнее/зимнее время и другие особенности.
Чтобы начать работу с модулем, необходимо импортировать класс zoneinfo.ZoneInfo. Он позволяет привязать объект datetime к конкретному часовому поясу, что обеспечивает точность вычислений времени. Например:
from zoneinfo import ZoneInfo
from datetime import datetime
dt = datetime(2025, 5, 7, 12, 0, 0, tzinfo=ZoneInfo("Europe/Moscow"))
print(dt)
В данном примере время 12:00 в Москве (время с учётом московского часового пояса). Если нужно выполнить преобразование времени из одного часового пояса в другой, это можно сделать через метод astimezone:
dt_utc = dt.astimezone(ZoneInfo("UTC"))
print(dt_utc)
Этот код преобразует время, указанное в московском часовом поясе, в время по UTC. При этом учитываются все особенности, связанные с переходом на летнее/зимнее время.
Кроме того, модуль zoneinfo позволяет работать с текущим временем для конкретных часовых поясов. Для этого используется datetime.now с указанием часового пояса:
dt_now = datetime.now(ZoneInfo("America/New_York"))
print(dt_now)
Если вам нужно узнать доступные часовые пояса, можно использовать метод zoneinfo.available_timezones(). Этот метод возвращает список всех поддерживаемых часовых поясов:
from zoneinfo import available_timezones
for timezone in available_timezones():
print(timezone)
Когда необходимо работать с временем в разных странах, учитывая локальные особенности, использование zoneinfo является наилучшим выбором, поскольку этот модуль интегрируется с самой актуальной базой данных временных зон. Это важный момент для точности времени в приложениях, работающих на глобальном уровне.
В случае необходимости изменения часового пояса для уже существующего объекта datetime, можно использовать метод replace:
dt_new = dt.replace(tzinfo=ZoneInfo("Asia/Tokyo"))
print(dt_new)
Этот код изменяет часовой пояс объекта dt с московского на токийский. Обратите внимание, что при использовании replace не происходит пересчёта времени, а просто меняется привязка к часовому поясу.
Модуль zoneinfo является мощным инструментом для работы с датами и временем, когда необходимо учитывать различные часовые пояса, что делает его незаменимым в международных проектах и приложениях, работающих с временными данными по всему миру.
Вычисление разницы между датами и временем
В Python для вычисления разницы между датами и временем используется модуль datetime. Основной класс для работы с датами и временем – datetime.datetime. Он позволяет выполнять операции вычитания, чтобы получить продолжительность между двумя временными метками.
Пример вычисления разницы между двумя датами:
from datetime import datetime
date1 = datetime(2025, 5, 1)
date2 = datetime(2025, 5, 7)
difference = date2 - date1
print(difference.days)
Результат выполнения этого кода – число дней между двумя датами. В данном случае результат будет равен 6.
Для более точного вычисления разницы между временем, например, с учетом часов, минут и секунд, также используется тип timedelta, который возвращается при вычитании объектов datetime.
Пример с разницей во времени:
from datetime import datetime
time1 = datetime(2025, 5, 1, 14, 30)
time2 = datetime(2025, 5, 1, 18, 45)
difference = time2 - time1
print(difference)
Этот код выведет разницу во времени в формате hh:mm:ss, в данном случае результат будет «4:15:00», что означает 4 часа и 15 минут.
Также можно получить разницу в секундах, используя атрибут total_seconds() объекта timedelta:
seconds = difference.total_seconds()
print(seconds)
Если важно учитывать только определённые единицы времени, можно манипулировать объектами timedelta, извлекая нужные части разницы, например, минуты или часы. В этом случае полезно использовать атрибуты days, seconds и microseconds.
Для работы с временными зонами и более сложных вычислений, таких как разница между датами в разных временных зонах, можно использовать модуль pytz, который позволяет корректно учитывать смещения временных зон и переходы на летнее/зимнее время.
Добавление и вычитание временных интервалов с timedelta
Модуль datetime в Python предоставляет класс timedelta, который используется для представления разницы между датами или временем. Его можно применять для добавления и вычитания временных интервалов, что полезно в различных задачах обработки дат и времени.
Основные операции с timedelta включают сложение и вычитание временных интервалов, а также операции с датами и временем. Рассмотрим, как это работает на практике.
Создание объекта timedelta

Объект timedelta создается с использованием аргументов, которые представляют временные единицы, такие как дни, секунды и микросекунды. Вот пример создания временного интервала:
from datetime import timedelta
interval = timedelta(days=5, hours=3, minutes=30)
print(interval) # Выведет: 5 days, 3:30:00
Добавление интервала к текущей дате

Чтобы добавить интервал времени к текущей дате, можно использовать операцию сложения с объектом datetime.
from datetime import datetime
now = datetime.now()
new_time = now + timedelta(days=10)
print(new_time) # Выведет дату через 10 дней от текущего времени
Таким образом, добавление временного интервала позволяет изменять даты и время на нужное количество дней, часов или минут.
Вычитание интервала из даты

Чтобы вычесть интервал из даты, достаточно использовать операцию вычитания с объектом timedelta.
past_time = now - timedelta(days=7)
print(past_time) # Выведет дату 7 дней назад
Вычитание интервала может быть полезным для вычисления времени в прошлом, например, при анализе событий или вычислении срока годности.
Комбинированные операции
Операции с timedelta могут быть комбинированы. Например, можно добавить несколько интервалов одновременно или вычесть несколько дней и часов из определенной даты:
combined_time = now + timedelta(days=5, hours=8) - timedelta(minutes=30)
print(combined_time) # Новый временной момент с учетом всех изменений
Применение к времени

Добавление и вычитание интервалов с временем работает аналогично действиям с датами. Однако стоит учитывать, что при операциях с временем может потребоваться учитывать дополнительные факторы, такие как переход на следующий день.
from datetime import time
current_time = time(14, 30)
new_time = datetime.combine(datetime.today(), current_time) + timedelta(hours=5)
print(new_time.time()) # Время, прибавленное на 5 часов
Если требуется вычесть интервал из времени, то так же используется стандартная операция вычитания с временным интервалом:
past_time = datetime.combine(datetime.today(), current_time) - timedelta(hours=3)
print(past_time.time()) # Время, вычтенное на 3 часа
Рекомендации
- При работе с временными интервалами важно учитывать возможные погрешности, например, в переходе между летним и зимним временем.
- Для работы с интервалами в днях, часах и минутах удобно использовать объект
timedelta, так как он поддерживает множество операций с датами и временем. - Используйте объект
timedeltaдля вычислений в сроках и длительностях, избегая ручного подсчета дней или часов.
В результате использование timedelta позволяет легко манипулировать датами и временем, добавлять и вычитать временные интервалы, а также выполнять точные вычисления с датами в Python.
Преобразование между timestamp и datetime
В Python преобразование между объектами `timestamp` и `datetime` осуществляется с использованием стандартного модуля `datetime`. Эти два формата широко применяются для работы с временными метками: `timestamp` представляет собой количество секунд с начала эпохи (1 января 1970 года), а `datetime` – объект, содержащий год, месяц, день, час, минуту, секунду и микро-секунду.
Чтобы преобразовать `timestamp` в объект `datetime`, используется метод `fromtimestamp()`. Этот метод принимает число секунд и возвращает объект `datetime` в локальной временной зоне (если не указан другой параметр). Пример:
import datetime
timestamp = 1609459200
dt = datetime.datetime.fromtimestamp(timestamp)
print(dt)
Этот код выведет: 2021-01-01 00:00:00. Важно учитывать, что для работы с временными метками в UTC необходимо использовать метод `utcfromtimestamp()`.
Обратное преобразование, то есть получение `timestamp` из объекта `datetime`, выполняется через метод `timestamp()`. Он возвращает количество секунд с начала эпохи для заданной временной метки. Пример:
import datetime
dt = datetime.datetime(2021, 1, 1, 0, 0, 0)
timestamp = dt.timestamp()
print(timestamp)
Этот код выведет: 1609459200.0. Обратите внимание, что результат всегда будет в виде числа с плавающей точкой.
Стоит помнить, что при преобразовании между `timestamp` и `datetime` учитывается часовой пояс. Если вам нужно работать с временными метками в UTC, важно использовать функции `datetime.datetime.utcfromtimestamp()` и `datetime.datetime.now(datetime.timezone.utc)` для получения корректных значений.
Также, при работе с временными метками, всегда проверяйте точность данных. Важно помнить, что значением `timestamp` является число секунд (или миллисекунд), что может влиять на точность, особенно в случае работы с датами, требующими более высокой точности. В этом случае можно использовать модуль `time` для работы с временными метками в микросекундах, что дает большую гибкость при работе с датами.
Вопрос-ответ:
Как в Python работать с датами и временем?
В Python работа с датами и временем осуществляется с помощью стандартного модуля `datetime`. Этот модуль предоставляет функциональность для представления, обработки и манипуляции датами и временем. В нем есть классы, такие как `date`, `time`, `datetime`, которые позволяют работать с отдельными компонентами времени (например, год, месяц, день, час, минута, секунда). Также есть возможности для вычисления разницы между датами и временем, а также для форматирования и парсинга строк, представляющих дату и время.
