TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #10 511
Все знают как красиво написать дату и время с помощью библиотеки datetime:

>>> from datetime import datetime
>>>
>>> dt = datetime.now()
>>> dt.strftime('%Y.%m.%d %H:%I')
'2020.01.08 12:00'

Но мало кто знает, что тоже самое можно сделать и другим способом:

>>> "{:%Y.%m.%d %H:%I}".format(dt)
'2020.01.08 12:00'

Если паттерн хранится отдельно, то можно записать так

>>> date_frmt = '%Y.%m.%d %H:%I'
>>> '{:{}}'.format(dt, date_frmt)
'2020.01.08 12:00'

Хм, а чем это лучше, спросите вы?

1. Удобно писать более комплексные шаблоны

>>> event_name = 'Python-вебинар'
>>> "Сегодня, {:%Y.%m.%d}, ровно в {:%H:%I} мы начинаем {}!".format(dt, dt, event_name)
'Сегодня, 2020.01.08, ровно в 12:00 мы начинаем Python-вебинар!'
(ну да, такие паттерны можно писать и в strftime, если что. Хотя, можете напороться на UnicodeEncodeError даже в Python3!)

Чтобы не повторять аргумент dt делаем форматирование по индексу
"{0:%Y}  {0:%H.%I}".format(dt)


Если используем разные даты, то можно сделать форматирование по имени
"{date1:%Y}-{date2:%Y} (current {date1:%Y})".format(date1=dt1, date2=dt2)

2. Форматирование даты находится непосредственно в тексте а не в отдельной переменной, что бывает удобней в некоторых случаях. Например, если текст хранится в базе данных то не нужно гдето отдельно хранить формат дат.

3. Зная про эту фишку, и что реализуется она с помощью magic-метода
__format__
можно начать писать свои классы с подобным функционалом! Собственно, в классе datetime этот метод просто вызывает уже знакомый метод strftime.

Я набросал простой пример с таким поведением, смотрим в гистах 🔗.
GitHub python/cpython The Python programming language. Contribute to python/cpython development by creating an account on GitHub.
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →