Для работы с датой и времен в Python предназначен модуль datetime
. Этот модуль позволяет всячески манипулировать с временными величинами, что весьма полезно в скриптах, ориентированных на использование в реальном времени. С помощью этого модуля можно считать текущее время на устройстве, узнать разницу между разными моментами времени или, наоборот, прибавить к текущему времени некоторый временной отрезок и запустить счетчик на сайте с отсчетом до какого-нибудь события.
Одна из проблем, связанных с любыми датами и временем — это его формат. В Америке распространен формат MM-DD-YYYY: сначала идет месяц, потом день и в конце располагается год. Для русскоязычных стран более привычным является формат DD-MM-YYYY. Помимо них существуют иные записи даты и времени. Иногда в скриптах возникает необходимость считывать и выводить данные формата datetime
, то есть дату. Чтобы сделать этот процесс более комфортным, разработчики придумали два метода для преобразования строк в формат datetime
и обратно — strptime()
и strftime()
.
В рамках этого материала мы разберем работу этих методов в Python и практику их применения.
Метод класса 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. Чтобы передать информацию об этом в метод мы используем следующие обозначения:
Между кодов мы используем те же пунктуационные разделители, что и в исходной строке.
Метод 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
cloud
В этом разделе размещено описание всех кодов формата.
Сокращенная форма дня недели. Например, Пт или 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'))
Вывод:
Friday
Сокращенная форма месяца. Например, Ноя и 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
День месяца от 1 до 31.
Применение:
d_time = datetime.now()
print(d_time.strftime('%d'))
Вывод:
11
Часы в 24-часовом формате от 0 до 23.
Применение:
H_time = datetime.now()
print(H_time.strftime('%H'))
Вывод:
11
Часы в 12-часовом формате от 1 до 12.
Применение:
I_time = datetime.now()
print(I_time.strftime('%I'))
Вывод:
11
Порядковый номер дня в году от 1 до 366.
Применение:
j_time = datetime.now()
print(j_time.strftime('%j'))
Вывод:
315
Номер месяца от 1 до 12.
Применение:
m_time = datetime.now()
print(m_time.strftime('%m'))
Вывод:
11
Минуты от 0 до 59.
Применение:
M_time = datetime.now()
print(M_time.strftime('%M'))
Вывод:
49
Код используется вместе с 12-часовым форматом для обозначения времени до полудня и после.
Применение:
p_time = datetime.now()
print(p_time.strftime('%I%p'))
Вывод:
11AM
Секунды от 00 до 59.
Применение:
S_time = datetime.now()
print(S_time.strftime('%S'))
Вывод:
03
Порядковый номер недели в году от 0 до 52. Нулевая неделя начинается с воскресенья.
Применение:
U_time = datetime.now()
print(U_time.strftime('%U'))
Вывод:
45
Порядковый номер дня недели. Воскресенье — 0, суббота — 6.
Применение:
w_time = datetime.now()
print(w_time.strftime('%w'))
Вывод:
5
Порядковый номер недели в году. Нулевая неделя начинается с понедельника, а не с воскресенья, как в %U
.
Применение:
W_time = datetime.now()
print(W_time.strftime('%W'))
Вывод:
45
Дата в формате 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'))
Вывод:
11:57:13
Год без века от 00 до 99.
Применение:
y_time = datetime.now()
print(y_time.strftime('%y'))
Год с веком.
Применение:
Y_time = datetime.now()
print(Y_time.strftime('%Y'))
Вывод:
2022
Временная зона, при наличии.
Код для знака "%" в дате:
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 не обрабатывает склонения месяцев и дней. Любые названия должны быть в именительном падеже.
Облачные серверы по выгодным ценам
В рамках этого материала мы рассмотрели работу методов strptime()
и strftime()
в Python. Это отличные инструменты для работы с датами и временем. Если вы хотите глубже изучить работу этих методов, то для своей исследовательской деятельности вы можете арендовать облачный сервер в timeweb.cloud.