Работа с датами и временем является одной из базовых задач в программировании, так как многие приложения требуют точного учета и обработки этих данных. Возможности языка Python позволяют эффективно управлять датами и временем, переводя их в различные форматы для удобства применения.
В этой статье мы изучим методы strptime() и strftime(), которые позволяют конвертировать строки в объекты даты и времени и обратно. Таким образом, они повышают удобство и гибкость при работе с временными данными в Python.
Источники даты и времени
Как правило, компьютер получает информацию о дате и времени из встроенных системных часов. Их можно предварительно настроить на нужные параметры, а затем применять в различных ситуациях при разработке. Например, внутренние часы часто используются для генерации случайных чисел, что бывает необходимо во многих проектах для создания элементарной рандомности.
Альтернативным источником данных о дате и времени является сетевая синхронизация при подключении к интернету. Полученную информацию тоже можно применять для тех или иных потребностей.
Например, сравнивать различные даты, которые связаны с конкретными событиями, и вычислять интервалы между ними – часы, дни и т.д. Это полезно для ускорения расчетов или вывода информации в таблицы. Кроме того, синхронизация с сетевыми источниками обеспечивает актуальность временных данных, что особенно важно для приложений, которые требуют точного учета этих показателей.
Применяя оба метода получения даты и времени (системных часов и сетевой синхронизации), можно создать надежные и точные механизмы работы с этими данными в Python.
Модуль datetime
Язык Python поддерживает множество инструментов для управления данными о времени и их преобразования в другие форматы. Все эти функции собраны в отдельном модуле datetime, который предоставляет удобный интерфейс для работы с датами и временем.
Модуль datetime подключается стандартным способом, как другие модули или библиотеки в Python. Он позволяет не только выводить и сохранять данные о времени, но и применять таймеры для запуска различных скриптов.
Одним из удобных инструментов этого модуля является возможность привязывать отсчет времени к любому событию. Еще одной важной особенностью считается поддержка различных форматов для вывода даты и времени.
Например:
- в некоторых странах сначала указывается день, затем месяц, часы и минуты;
- в других странах сначала идут данные о времени, а затем дата;
- иногда сначала может быть указан месяц или даже год, а потом уже числа и дни недели;
- месяцы могут быть записаны как буквами, так и цифрами.
Возможности модуля datetime позволяют гибко реагировать на эти отличия и выводить все временные данные в едином формате, чтобы избежать путаницы и программных ошибок. Это особенно полезно при обработке больших массивов данных для обеспечения их правильной и точной интерпретации в виде строк и чисел.
Метод strptime()
В языке Python даты и время представляются в виде объектов специального формата, который отличается от обычных строковых и числовых типов данных. Чтобы облегчить преобразование строковых представлений дат и времени в объекты datetime и обратно, в Python предусмотрены специальные встроенные функции. Одной из них является метод strptime().
Этот метод можно применять для перевода заданной строки данных в формат datetime. Для примера рассмотрим следующий его базовый синтаксис:
datetime.strptime(string_date, 'params')
Здесь:
- string_date – это собственно искомая строка;
- params – те самые международные стандарты времени, в которых будет выводиться итоговый объект datetime.
Подробный процесс, как настроить эти параметры, рассмотрим в следующих разделах. А пока приведем несколько вариантов применения этого синтаксиса для вывода дат:
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)
Здесь мы преобразуем строки дат в объекты datetime, применяя различные популярные форматы.
Сам формат указывается с помощью символа процента %, за которым следует спецификатор:
- день – %d;
- месяц – %m, %В или %b;
- год – %Y или %y.
Результат вывода:
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
Метод strftime()
Теперь рассмотрим метод с обратной функцией – strftime(), который выводит объекты типа datetime в обычную строку. Преимущество этого метода в том, что он позволяет преобразовывать данные в любой требуемый формат.
Базовый синтаксис этой команды выглядит следующим образом:
object.strftime("params")
В отличие от первого метода, здесь:
- в начале строки идет элемент типа object – это и есть объект времени, который вводится в команду;
- 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
При желании можно комбинировать оба метода, strptime() и strftime(), чтобы переводить строки в даты и обратно. Такой подход позволяет легко редактировать эти данные в обычном строчном виде, возвращая потом в понятный системе формат времени.
Список кодов форматов
Теперь рассмотрим различные варианты форматирования даты и времени по методам strptime и strftime. Их существует множество разновидностей, включая сокращенные записи дней недели, полные названия месяцев и многое другое. Ниже приведем примеры основных кодов форматирования.
Дни недели:
- %a – сокращенное название дня недели (прописная буква).
- %A – полное название дня недели (заглавная буква).
Пример:
a_time = datetime.now() print(a_time.strftime('%a')) 2022-11-11 11:12:50.176899 Fri A_time = datetime.now() print(A_time.strftime('%A')) Friday
Далее %b применяется для вывода названия месяцев, тоже в короткой и длинной форме, в зависимости от регистра:
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 temp_date='11 November 2022' today = datetime.strptime(temp_date,'%d %B %Y') print(today) 2022-11-11 00:00:00
Стоит отметить, что благодаря встроенным функциям модуля datetime можно применять как русские, так и английские названия для вывода дат и месяцев, а также на других языках.
%с применяется для краткого написания полной строки даты (месяц, год, число, минуты и секунды):
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 применяется только для вывода месяцев:
d_time = datetime.now() print(d_time.strftime('%d'))
Часы можно обозначить следующими символами:
- %H – в 24-часовом формате;
- %I – в формате от 1 до 12.
Пример:
H_time = datetime.now() print(H_time.strftime('%H')) I_time = datetime.now() print(I_time.strftime('%I'))
%j применяется для вывода дней в году (числа от 1 до 366):
j_time = datetime.now() print(j_time.strftime('%j'))
%m – аналогично выводит месяцы в году (от 1 до 12):
m_time = datetime.now() print(m_time.strftime('%m'))
Чтобы не возникало путаницы, для вывода минут применяется %М:
M_time = datetime.now() print(M_time.strftime('%M'))
%p выводит время в формате до и после полудня, а %S – секунды:
p_time = datetime.now() print(p_time.strftime('%I%p')) S_time = datetime.now() print(S_time.strftime('%S'))
%U применяется для вывода порядкового номера недели в году.
%W – применяется для отсчета дней с понедельника, а не воскресенья (как в РФ):
U_time = datetime.now() print(U_time.strftime('%U')) W_time = datetime.now() print(W_time.strftime('%W'))
%w означает дни недели внутри семидневки:
w_time = datetime.now() print(w_time.strftime('%w'))
Напоследок, самые общие команды для вывода дат и времени в привычном формате:
- месяц/год/число;
- минута/час/секунды.
Для этого применяется соответственно %x и %X:
temp_time = datetime.strptime('11/10/22', '%x') print(temp_time) 2022-11-10 00:00:00 X_time = datetime.now() print(X_time.strftime('%X')) 11:57:13
Аналогично %y и %Y применяются для вывода года в двухцифровом и в полном формате:
y_time = datetime.now() print(y_time.strftime('%y')) Y_time = datetime.now() print(Y_time.strftime('%Y'))
%Z применяется для отдельного вывода временной зоны, то есть часового пояса. А двойной значок процента %% позволяет добавить его непосредственно в строку:
temp_time = datetime.strptime('10%11%22', '%d%%%m%%%y') print(temp_time) 2022-11-10 00:00:00
Заключение
Завершая статью, стоит указать еще несколько возможностей модуля datetime. При подключении библиотеки locale (буквально – местные названия) можно переключаться на любые пользовательские форматы для дат и дней недели:
import locale locale.setlocale(locale.LC_ALL, 'ru_RU') current_time = datetime.now() print(current_time.strftime('%A'))
В целом, этот метод предоставляет все необходимые инструменты для работы с датами и временем в Python. А его простота и краткость подойдут любому пользователю для быстрого освоения и применения.
Комментарии