Преобразование datetime в Python: строка без микросекунд

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того, чтобы преобразовать объект datetime в строку без микросекунд, воспользуйтесь методом strftime с форматированием "%Y-%m-%d %H:%M:%S":

Python
Скопировать код
from datetime import datetime

print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

В результате мы получим строку следующего вида: "2023-04-12 15:45:08", без микросекунд.

Кинга Идем в IT: пошаговый план для смены профессии

Основы форматирования datetime: strftime и isoformat

Освоение datetime в Python не обходится без знакомства со strftime и isoformat. Эти инструменты позволяют нам преобразовывать объект datetime в отформатированную строку.

strftime: Классика работы с датой и временем в Python

strftime предлагает нам создать отформатированную строку с помощью определённых директив формата. Такой формат, как "%Y-%m-%d %H:%M:%S" подсказывает Python: "Оформи datetime в формате YYYY-MM-DD HH:MM:SS, но без микросекунд".

isoformat: Новая и удобная возможность в Python 3.6+

С isoformat работать становится проще, особенно с Python 3.6+, где был введён параметр timespec. Он даёт возможность задать точность для отображения времени.

Примеры кода! (Или: Как полюбить форматирование datetime)

Добрый старый replace

Мы можем легко избавиться от микросекунд с помощью метода replace:

Python
Скопировать код
from datetime import datetime

dt_without_microseconds = datetime.now().replace(microsecond=0)
print(dt_without_microseconds.strftime("%Y-%m-%d %H:%M:%S"))

Мы с гордостью используем isoformat

Для Python 3.6 и более новых версий isoformat открывает новые горизонты:

Python
Скопировать код
from datetime import datetime

print(datetime.now().isoformat(sep=' ', timespec='seconds'))

UTC и datetime: Идеальный союз на глобальном уровне

Когда мы работаем с UTC datetimes, то микросекунды становятся ненужными:

Python
Скопировать код
from datetime import datetime, timezone

utc_dt = datetime.now(timezone.utc).replace(microsecond=0)
print(utc_dt.strftime("%Y-%m-%d %H:%M:%S%z"))

Часовые пояса

Если у объекта datetime есть данные о часовом поясе и они не нужны, воспользуйтесь astimezone(). Вместе с ним можно опустить также директивы %z и %Z.

Будьте внимательны к неожиданным ошибкам и редким случаям

Отсутствие микросекунд

Обработка datetime без микросекунд производится просто:

Python
Скопировать код
print(datetime(2023, 4, 12, 15, 45).strftime("%Y-%m-%d %H:%M:%S"))

Не путайте форматы!

Обратите внимание на директивы strftime: %m и %M используются для месяца и минут, %y и %Y — для года с/без учёта столетия.

Визуализация

Объект datetime — это сложная структура:

Markdown
Скопировать код
Оригинальный DateTime:   🍊 (Цельный)
Желаемый результат:      🍊💧 (Только сок)

В Python речь идёт о правильном извлечении данных из объекта времени:

Python
Скопировать код
from datetime import datetime
# Всё целиком, вместе с кожурой (с микросекундами)
datetime.now().isoformat()        # 🍊 2023-04-12T15:23:14.123456

# Только сок (без кожуры, спасибо)
datetime.now().replace(microsecond=0).isoformat() # 🍊💧 2023-04-12T15:23:14

Считайте .replace(microsecond=0) соковыжималкой, которая отсеивает всё лишнее, оставляя только самое лучшее.

Совместимость версий Python: Переправа через версии

datetime развивается наряду с Python!

Python 3.6 и более новые версии

Для полной эффективности используйте параметр timespec у isoformat:

Python
Скопировать код
datetime.now().isoformat(sep=' ', timespec='seconds')

Версии Python до 3.6

В случае отсутствия параметра timespec используйте сочетание strftime и replace(microsecond=0) в качестве предварительного форматирования.

Полезные материалы

  1. Python strftime Reference — подробная информация по использованию strftime в Python.
  2. datetime — Basic date and time types — Python 3.12.1 documentation — всё об использовании strftime и strptime в Python.
  3. python – How to remove microseconds from a timedelta object? – Stack Overflow — другие решения проблемы с микросекундами в timedelta.
  4. Using Python datetime to Work With Dates and Times – Real Python — всестороннее руководство по работе с datetime в Python.
  5. Arrow: Better dates & times for Python — Arrow 🏹 1.3.0 documentation — библиотека для эффективной работы с датами и временем в Python.