Всем привет! Сегодня разберём, как работать с датой и временем в Python, а именно — datetime.strptime()
и strftime()
. Если вы хоть раз парсили логи, работали с таймстемпами или пытались сделать нормальный вывод времени для пользователей — вы точно сталкивались с этим зоопарком форматов. Не хочется каждый раз лезть в доку, так что держите подробный разбор с примерами и граблями, на которые сам наступал.
Почему это важно?
Вроде бы дата и время — простая штука, но когда надо превратить строку «2024-06-27 13:37:00» в объект времени или наоборот — тут и начинается веселье. Логи, отчёты, автоматизация, интеграции — всё это требует нормальной работы с датами. Ошибся в формате — и всё, привет баги и ночные дебаги.
Что требуется (требования, ОС, железо)
- Python 3.6+ (но лучше свежее, чтобы не мучиться с несовместимостями)
- Любая ОС: Linux, macOS, Windows — всё ок, модуль
datetime
встроен - Железо не важно — даже на Raspberry Pi работает без проблем
Установка — пошаговая инструкция
- Проверьте Python:
python3 --version
Если Python установлен — отлично. Если нет, ставим с официального сайта или через пакетный менеджер (
apt install python3
,brew install python
и т.д.). - Модуль
datetime
уже есть:Ничего дополнительно ставить не нужно, просто импортируйте:from datetime import datetime
- Если работаете с таймзонами:Рекомендую докинуть pytz или dateutil:
pip install pytz python-dateutil
Но для базовой работы с
strptime
иstrftime
это не обязательно.
Возможности
- strptime() — превращает строку в объект
datetime
по заданному формату. - strftime() — превращает объект
datetime
в строку по нужному формату. - Масса поддерживаемых форматов (год, месяц, день, час, минута, секунда, микросекунды, день недели и т.д.)
- Работает быстро, стабильно, кроссплатформенно.
Использование: полный список команд и вариантов
Импортируем:
from datetime import datetime
strptime()
Синтаксис:
dt = datetime.strptime('2024-06-27 13:37:00', '%Y-%m-%d %H:%M:%S')
%Y
— год (2024)%m
— месяц (06)%d
— день (27)%H
— час (24-часовой формат)%M
— минута%S
— секунда
Полный список форматов: официальная дока
strftime()
Синтаксис:
now = datetime.now()
print(now.strftime('%d.%m.%Y %H:%M')) # 27.06.2024 13:37
Больше примеров:
dt = datetime.strptime('27/06/2024', '%d/%m/%Y')
print(dt.strftime('%A, %d %B %Y')) # Thursday, 27 June 2024
# ISO 8601
dt = datetime.strptime('2024-06-27T13:37:00', '%Y-%m-%dT%H:%M:%S')
print(dt.isoformat()) # 2024-06-27T13:37:00
# Парсим нестандартный формат
dt = datetime.strptime('27-06-2024 13_37', '%d-%m-%Y %H_%M')
print(dt.strftime('%Y/%m/%d %H:%M')) # 2024/06/27 13:37
Ошибки, как делать не надо
- Формат не совпадает со строкой:
datetime.strptime('2024/06/27', '%Y-%m-%d')
— кинетValueError
, потому что разделители разные. - Забыли про ведущие нули:
datetime.strptime('2024-6-7', '%Y-%m-%d')
— не сработает, надо'%Y-%m-%d'
только если строка'2024-06-07'
. Для без нулей:'%Y-%-m-%-d'
(но это не везде работает, например, Windows не поддерживает%-m
). - Неправильный порядок формата:
datetime.strptime('27-06-2024', '%Y-%m-%d')
— не то, местами перепутаны день и год. - Путаем UTC и локальное время:
datetime.now()
— это локальное время, а не UTC. Для UTC используйтеdatetime.utcnow()
илиdatetime.now(timezone.utc)
(Python 3.2+).
Пример реального использования в окружении
Допустим, у вас есть лог-файл вида:
2024-06-27 12:00:01 INFO Start backup
2024-06-27 12:00:05 INFO Backup finished
2024-06-27 12:00:07 ERROR Backup failed
Нужно найти все ошибки за последние 24 часа.
from datetime import datetime, timedelta
with open('backup.log') as f:
now = datetime.now()
for line in f:
ts_str = line.split()[0] + ' ' + line.split()[1] # '2024-06-27 12:00:07'
dt = datetime.strptime(ts_str, '%Y-%m-%d %H:%M:%S')
if 'ERROR' in line and now - dt < timedelta(days=1):
print(line.strip())
В реальной жизни так парсят логи, фильтруют алерты, делают отчёты и автоматизацию в cron-скриптах.
Заключение
Работа с датами и временем — обязательный скилл для любого, кто пишет скрипты, автоматизацию, работает с логами или просто хочет получать красивые таймстемпы. strptime()
и strftime()
— ваши лучшие друзья. Главное — не путать форматы, внимательно читать ошибки и не забывать про таймзоны, если работаете в распределённых системах или облаках.
Официальная документация Python: https://docs.python.org/3/library/datetime.html
Если остались вопросы — гуглите, спрашивайте на Stack Overflow, или пишите в комменты. Удачи и чистых логов!
Ваш отзыв