Работа с датой и временем: datetime.strptime() и strftime()

Всем привет! Сегодня разберём, как работать с датой и временем в Python, а именно — datetime.strptime() и strftime(). Если вы хоть раз парсили логи, работали с таймстемпами или пытались сделать нормальный вывод времени для пользователей — вы точно сталкивались с этим зоопарком форматов. Не хочется каждый раз лезть в доку, так что держите подробный разбор с примерами и граблями, на которые сам наступал.

Почему это важно?

Вроде бы дата и время — простая штука, но когда надо превратить строку «2024-06-27 13:37:00» в объект времени или наоборот — тут и начинается веселье. Логи, отчёты, автоматизация, интеграции — всё это требует нормальной работы с датами. Ошибся в формате — и всё, привет баги и ночные дебаги.

Что требуется (требования, ОС, железо)

  • Python 3.6+ (но лучше свежее, чтобы не мучиться с несовместимостями)
  • Любая ОС: Linux, macOS, Windows — всё ок, модуль datetime встроен
  • Железо не важно — даже на Raspberry Pi работает без проблем

Установка — пошаговая инструкция

  1. Проверьте Python:
    python3 --version

    Если Python установлен — отлично. Если нет, ставим с официального сайта или через пакетный менеджер (apt install python3, brew install python и т.д.).

  2. Модуль datetime уже есть:Ничего дополнительно ставить не нужно, просто импортируйте:
    from datetime import datetime
  3. Если работаете с таймзонами:Рекомендую докинуть 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, или пишите в комменты. Удачи и чистых логов!

Хотите прочитать больше про Разное?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *