Преобразование datetime в Python: строка без микросекунд
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того, чтобы преобразовать объект datetime
в строку без микросекунд, воспользуйтесь методом strftime
с форматированием "%Y-%m-%d %H:%M:%S"
:
from datetime import datetime
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
В результате мы получим строку следующего вида: "2023-04-12 15:45:08"
, без микросекунд.
Основы форматирования 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
:
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
открывает новые горизонты:
from datetime import datetime
print(datetime.now().isoformat(sep=' ', timespec='seconds'))
UTC и datetime: Идеальный союз на глобальном уровне
Когда мы работаем с UTC datetimes, то микросекунды становятся ненужными:
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 без микросекунд производится просто:
print(datetime(2023, 4, 12, 15, 45).strftime("%Y-%m-%d %H:%M:%S"))
Не путайте форматы!
Обратите внимание на директивы strftime
: %m
и %M
используются для месяца и минут, %y
и %Y
— для года с/без учёта столетия.
Визуализация
Объект datetime — это сложная структура:
Оригинальный DateTime: 🍊 (Цельный)
Желаемый результат: 🍊💧 (Только сок)
В 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
:
datetime.now().isoformat(sep=' ', timespec='seconds')
Версии Python до 3.6
В случае отсутствия параметра timespec
используйте сочетание strftime
и replace(microsecond=0)
в качестве предварительного форматирования.
Полезные материалы
- Python strftime Reference — подробная информация по использованию
strftime
в Python. - datetime — Basic date and time types — Python 3.12.1 documentation — всё об использовании
strftime
иstrptime
в Python. - python – How to remove microseconds from a timedelta object? – Stack Overflow — другие решения проблемы с микросекундами в
timedelta
. - Using Python datetime to Work With Dates and Times – Real Python — всестороннее руководство по работе с datetime в Python.
- Arrow: Better dates & times for Python — Arrow 🏹 1.3.0 documentation — библиотека для эффективной работы с датами и временем в Python.