Метод strptime() и strftime() в Python: инструкция и примеры

    Команда Simple-Server
    03.06.2026
    7 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Метод класса **datetime strptime() **принимает в качестве одного из аргументов строку и создает на основе её объект типа datetime. Метод имеет следующий синтаксис:

    datetime.strptime(string_date, 'params')
    • string_date — это строка, на основе которой нужно создать объект типа datetime;
    • params — это коды форматы. Их разберём в разделе "Список кодов формата". В целом, они передают методу информацию о том, какой формат имеет дата в строке: 10.11.2022, 11.10.2022 или 10 ноябрь 2022.

    Для примера возьмем несколько случайных дат с разным форматом и создадим на их основе новые объекты.

    Рассмотрим работу datetime.strptime в Python 3 на примерах:

    from datetime import datetime as dt first_strdate='10.05.2025' second_strdate='26-June-2005' third_strdate='5 Jan, 11' first_date=dt.strptime(first_strdate, '%d.%m.%Y') second_date=dt.strptime(second_strdate, '%d-%B-%Y') third_date=dt.strptime(third_strdate, '%d %b, %y') print(first_strdate, '->', first_date) print(second_strdate, '->', second_date) print(third_strdate, '->', third_date) 10.05.2025 -> 2025-05-10 00:00:00 26-June-2005 -> 2005-06-26 00:00:00 5 Jan, 11 -> 2011-01-05 00:00:00

    Как видим, в строке дата может принимать различные форматы. Шаблон, по которому на основе этой строки будет создан новый объект, описывается с помощью кодов формата и пунктуационных знаков, соответствующих этой строке. Разберемся подробнее в принципе их работы.

    В первой строке из примера дата имеет формат DD.MM.YYYY. Чтобы передать информацию об этом в метод мы используем следующие обозначения:

    • %d — день месяца в виде десятичного числа;
    • %m — номер месяца;
    • %Y — год с указанием века;

    Между кодов мы используем те же пунктуационные разделители, что и в исходной строке.

    Метод strftime() преобразует объект типа datetime в строку. Метод имеет следующий синтаксис:

    object.strftime("params")
    • object — объект типа datetime, который необходимо преобразовать в строку;
    • params — форматы кода, на основании которых необходимо сформировать строку;

    Рассмотрим несколько практических примеров, как это работает на практике:

    from datetime import datetime as dt time = dt.now() day_of_the_month = time.strftime("%d") day_of_the_week = time.strftime(("%A")) month = time.strftime("%B") year = time.strftime("%Y") format_of_time = time.strftime("%H:%M") print('Today is', day_of_the_week+'.', 'It is', day_of_the_month, 'day of the', month, year) print('Current time', format_of_time) Today is Thursday. It is 10 day of the November 2022 Current time 15:40

    В этом разделе размещено описание всех кодов формата.

    Сокращенная форма дня недели. Например, Пт или Fri для пятницы в русской и английской локализации.

    a_time = datetime.now() print(a_time.strftime('%a')) 2022-11-11 11:12:50.176899 Fri

    Полная форма дня недели. Например, Пятница или Friday для пятницы в русской и английской локализации.

    A_time = datetime.now() print(A_time.strftime('%A'))

    Сокращенная форма месяца. Например, Ноя и Nov для ноября в русской и английской локализации.

    b_time = datetime.now() temp_date='11 Nov 2022' today = datetime.strptime(temp_date,'%d %b %Y') print(today,'\n', b_time.strftime('%b')) 2022-11-11 00:00:00  Nov

    Полная форма месяца. Например, Ноябрь или November для ноября в русской и английской локализации.

    temp_date='11 November 2022' today = datetime.strptime(temp_date,'%d %B %Y') print(today) 2022-11-11 00:00:00

    Код следующего шаблона: (сокращенный день недели) (сокращенное название месяца) (день месяца) (часы:минуты:секунды) (год).

    c_time = datetime.now() temp = datetime.strptime('Mon Nov 7 14:25:10 2022', '%c') print(c_time.strftime('%c'), '\n', temp) Fri Nov 11 11:30:00 2022  2022-11-07 14:25:10 d_time = datetime.now() print(d_time.strftime('%d'))

    Часы в 24-часовом формате от 0 до 23.

    H_time = datetime.now() print(H_time.strftime('%H'))

    Часы в 12-часовом формате от 1 до 12.

    I_time = datetime.now() print(I_time.strftime('%I'))

    Порядковый номер дня в году от 1 до 366.

    j_time = datetime.now() print(j_time.strftime('%j')) m_time = datetime.now() print(m_time.strftime('%m')) M_time = datetime.now() print(M_time.strftime('%M'))

    Код используется вместе с 12-часовым форматом для обозначения времени до полудня и после.

    p_time = datetime.now() print(p_time.strftime('%I%p')) S_time = datetime.now() print(S_time.strftime('%S'))

    Порядковый номер недели в году от 0 до 52. Нулевая неделя начинается с воскресенья.

    U_time = datetime.now() print(U_time.strftime('%U'))

    Порядковый номер дня недели. Воскресенье — 0, суббота — 6.

    w_time = datetime.now() print(w_time.strftime('%w'))

    Порядковый номер недели в году. Нулевая неделя начинается с понедельника, а не с воскресенья, как в %U.

    W_time = datetime.now() print(W_time.strftime('%W'))

    Дата в формате MM/DD/YY.

    temp_time = datetime.strptime('11/10/22', '%x') print(temp_time) 2022-11-10 00:00:00

    Время в формате HH:MM:SS.

    X_time = datetime.now() print(X_time.strftime('%X'))

    Год без века от 00 до 99.

    y_time = datetime.now() print(y_time.strftime('%y')) Y_time = datetime.now() print(Y_time.strftime('%Y'))

    Временная зона, при наличии.

    Код для знака "%" в дате:

    temp_time = datetime.strptime('10%11%22', '%d%%%m%%%y') print(temp_time) 2022-11-10 00:00:00

    Работа с локальными обозначениями

    Для работы с локальными обозначениями, например Декабрь вместо December, можно использовать библиотеку locale:

    import locale locale.setlocale(locale.LC_ALL, 'ru_RU') current_time = datetime.now() print(current_time.strftime('%A'))

    При использовании этой библиотеки для русскоязычных обозначений важно помнить, что библиотека locale не обрабатывает склонения месяцев и дней. Любые названия должны быть в именительном падеже.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны