Форматирование даты и времени в Python

Форматирование даты и времени в Python

Сегодня рассмотрим два метода strftime и strptime из стандартной библиотеки datetime в языке программирования Python.

Описание формата strftime

Кратко говоря, strftime преобразует объект date в строковую дату.

Это выглядит так: dateobject.strftime(format).

«Format» — это желаемый формат строки даты, который хочет получить пользователь. Формат строится с использованием кодов, приведенных ниже:

  • %a — будний день сокращенно (Пн, Вт,…)
  • %A — будний день полностью (Понедельник, Вторник,…)
  • %w — будний день, как десятичное число (1, 2, 3,…)
  • %d — день месяца в числах (01, 02, 03,…)
  • %b — месяцы сокращенно (Янв, Фев,…)
  • %B — название месяцев полностью (Январь, Февраль,…)
  • %m — месяцы в числах (01, 02, 03,…)
  • %y — года без века (19, 20, 21)
  • %Y — года с веком (2019, 2020, 2021)
  • %H — 24 часа в сутки (с 00 до 23)
  • %I — 12 часов в сутки (с 01 до 12)
  • %p — AM и PM (00-12 и 12-00)
  • %M — минуты (от 00 до 59)
  • %S — секунды (от 00 до 59)
  • %f — миллисекунды (6 десятичных чисел)

Использование strftime

Давайте рассмотрим конкретный пример — преобразование текущего времени в строку даты:

import datetime  
from datetime import datetime

now = datetime.now() 
print(now) 

Вывод программы:

2021-03-07 23:24:11.192196

Давайте теперь преобразуем приведенный выше объект datetime в строку datetime:

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

Вывод программы:

'2021-03-07 23:16:41'

Если вы хотите напечатать месяц в качестве сокращенного названия, замените %m на %b, как показано ниже:

now.strftime("%Y-%b-%d %H:%M:%S")

Вывод программы:

'2021-Mar-07 23:16:41'

И ещё один пример:

now.strftime("%Y/%b/%A %H:%M:%S")

Вывод программы:

'2021/Mar/Sunday 23:16:41'

Преобразование даты в strftime

Преобразование даты в строку очень похоже на преобразование datetime в строку.

Рассмотрим пример — преобразование текущего объекта даты в строку даты:

today = datetime.today() 
print(today)

Вывод программы:

2021-03-07 23:22:15.341074

Давайте преобразуем приведенный выше объект date в строку даты с помощью метода strftime:

today.strftime("%Y-%m-%d %H:%M:%S")

Вывод программы:

'2021-03-07 23:22:15'

Отображение миллисекунд

Чтобы получить строку даты с миллисекундами, используйте код формата %f в конце, как показано ниже:

today = datetime.today() 
today.strftime("%Y-%m-%d %H:%M:%S.%f")

Вывод программы:

'2021-03-07 23:23:50.851344'

Описание формата strptime

Strptime используется для преобразования строки в объект datetime. Тоесть обратное действие методу strftime. Это выглядит так: strptime(date_string, format).

Разберем пример: strptime(«9/23/20», «%d/%m/%y»). Формат «%d/%m/%y» представляет собой соответствующий формат «9/23/20». Результатом приведенной выше команды будет объект datetime.

Формат строится с использованием заранее определенных кодов. Есть много кодов на выбор. Наиболее важные из них были перечислены ранее (смотрите 1 пункт в содержании).

Использование метода strptime

Преобразуем строку даты в объект datetime:

import datetime 

datetime.datetime.strptime("09/23/2030 8:28","%m/%d/%Y %H:%M")

Вывод программы:

datetime.datetime(2030, 9, 23, 8, 28)

Заключение

На этом всё. Желаю удачи в программировании!

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Борис

    Здравствуйте, Егор!
    Статья замечательная, спасибо за неё!
    Пытаюсь научиться программировать, невзирая на свой зрелый возраст.
    Предполагаю, что метод «strptime» должен понадобиться мне для решения ближайших намеченных задач преобразования частей строк вида «31 декабря 2010» в объекты datetime — («%d/%m/%Y»).
    Наверное «декабря» и прочие неправильные или лишние буквы в названиях месяцев, тоже придётся обрабатывать до вида «декабрь»? Будет видно по мере реализации задачи.
    С преобразованием времени (часы, минуты) вроде должно быть проще.
    Надеюсь в Python 3.8 всё это будет работать.

    Ответить
    1. Егор Егоров автор

      Здравствуйте, Борис.
      Я бы советовал вам, произвести небольшое сопоставление строчного именования месяца в численное.
      Например:

      «Январь», «Января» — 01,
      «Февраль», «Февраля» — 02,
      «Март», «Марта» — 03.

      Для того, чтобы легче было преобразовать дату в формат datetime.

      Ответить