Преобразование 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-07 14:23:01"

Строковый формат подобен глине, он гибок и подстраивается под ваши требования.

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

Подробное руководство

Извлечение отдельных элементов даты

Можно разобрать объект datetime на его составляющие, как карточный домик. Для этого обратитесь к соответствующим атрибутам, чтобы получить год, месяц, день, час, минуту или секунду:

Python
Скопировать код
now = datetime.now()
formatted_date = f"{now.year}-{now.month:02d}-{now.day:02d} {now.hour:02d}:{now.minute:02d}:{now.second:02d}"
print(formatted_date)  # пример вывода: "2023-04-07 14:23:01"

Форматирование даты с помощью strftime

strftime – это мощный инструмент для форматирования дат в Python, поддерживающий множество форматов. Подробнее о них вы можете узнать в официальной документации Python (ссылка 1). Если вы хотите, чтобы форматированная дата включала полное название месяца или запятую, используйте "%B %d, %Y":

Python
Скопировать код
print(datetime.now().strftime("%B %d, %Y"))  # пример вывода: "April 07, 2023"

Использование F-строк для упрощенного форматирования даты

Если версия вашего Python – 3.6 или выше, обратите внимание на F-строки. Они позволяют вам включать различные выражения, в том числе и объекты datetime, непосредственно в строковые литералы:

Python
Скопировать код
print(f"{datetime.now():%B %d, %Y}")  # вывод: "April 07, 2023"

Этот пример демонстрирует, как с помощью F-строк можно элегантно и кратко форматировать даты в коде.

Альтернативные методы и лучшие практики

Способ простого форматирования с помощью ctime

Метод ctime() возвращает дату и время в виде хорошо читаемой строки.

Python
Скопировать код
print(datetime.now().ctime())  # "Fri Apr  7 14:23:01 2023"

Он не предоставляет широких возможностей настройки, но отлично подойдет для быстрого отображения временных меток.

Сравнение strftime и format()

Выбор между strftime и методом format() зависит от конкретной задачи и требований к коду. Если вам нужно сформатировать несколько переменных в одну строку, format() может быть очень полезен:

Python
Скопировать код
current_time = datetime.now()
formatted_date = "{:%B %d, %Y}".format(current_time)
print(formatted_date)  # вывод: "April 07, 2023"

Важное замечание: аргументы strftime обязательны

При использовании strftime() важно указывать полный формат. Пропуск любого из спецификаторов может привести к отсутствию данных или ошибкам. Проверьте, соответствует ли результат вашим ожиданиям:

Python
Скопировать код
# Забыли указать время.
print(datetime.now().strftime("%B %d, %Y"))  # вывод: "April 07, 2023" (время не указано!)

# Так гораздо лучше.
print(datetime.now().strftime("%B %d, %Y %H:%M:%S"))  # "April 07, 2023 14:23:01"

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

Представьте объект Python datetime как коробку 📦. Его внешний вид можно схематически представить так:

Markdown
Скопировать код
Объект datetime (📦): 2023-04-07 14:23:01

А вот как он может выглядеть после форматирования:

Python
Скопировать код
formatted_date = datetime_object.strftime('%B %d, %Y %H:%M:%S')

И новый вид такой же коробки теперь выглядит так:

Markdown
Скопировать код
Отформатированная строка (🏷️): "April 07, 2023 14:23:01"

strftime работает как машинка для печати этикеток с датами, делая каждую дату уникальной и удобной для чтения.

Препятствия и надежные инструменты

Учет часовых поясов

Когда работаете с часовыми поясами, убедитесь, что ваш объект datetime "осведомлен" о них. Для добавления временной зоны в строку формата используйте спецификатор %z:

Python
Скопировать код
from datetime import timezone
now = datetime.now(timezone.utc)
print(now.strftime("%Y-%m-%d %H:%M:%S%z"))  # вывод: "2023-04-07 14:23:01+0000"

Локализация форматирования даты

Если вам требуется отобразить дату на другом языке, измените локализацию Python, предварительно убедившись, что ваша ОС поддерживает это.

Сложное форматирование дат с использованием сторонних библиотек

Для сложных задач форматирования дат можно воспользоваться такими библиотеками, как Arrow или dateutil (ссылки 6 и 7), которые расширяют стандартный функционал работы с датами:

Python
Скопировать код
import arrow
print(arrow.now().format('MMMM DD, YYYY'))  # вывод: "April 07, 2023"

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

  1. datetime — Базовые типы даты и времени — документация Python 3.12.2 — официальная документация Python по использованию strftime и strptime.
  2. Справочная шпаргалка по Python strftime — удобный справочник по форматированию дат в Python с помощью strftime().
  3. Использование Python datetime для работы с датами и временем — Real Python — подробное руководство по работе с датами и временем в Python.
  4. PyFormat: Использование % и .format() на благо! — полезные советы по форматированию строк в Python.
  5. ISO 8601 – Википедия — международный стандарт записи даты и времени.
  6. Arrow: Лучшие даты и время для Python — документация Arrow 🏹 1.3.0 — альтернативная библиотека к datetime с расширенным функционалом.
  7. dateutil – мощные расширения для datetime — документация dateutil 2.8.2 — функции расширения стандартного модуля datetime.