Всем привет! Сегодня разберём, как работать с датой и временем в 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, или пишите в комменты. Удачи и чистых логов!
Ваш отзыв