Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs
До сих пор мы с
вами, в основном, имели дело с числовым представлением времени, если не считать
функцию ctime(), которая
возвращает строку с более понятным для пользователя данными:
t = time.ctime()
print(t) # Tue Jul 8 11:18:04 2025
Однако они не
позволяют получать отдельно дни, часы, месяцы и другую информацию измеренной даты
и времени. Если нам в программе требуются такие данные, то их можно получить с
помощью функции localtime(). Например:
st = time.localtime()
print(st)
В результате st будет представлять
собой структуру (класс) time.struct_time следующего
вида:
time.struct_time(tm_year=2025, tm_mon=7, tm_mday=8, tm_hour=11, tm_min=49, tm_sec=28, tm_wday=1, tm_yday=189, tm_isdst=0)
В ней отдельно
имеются атрибуты для даты и времени:
|
Поле
|
Описание
|
|
tm_year
|
Год
|
|
tm_mon
|
Номер
месяца (1–12)
|
|
tm_mday
|
День
месяца (1–31)
|
|
tm_hour
|
Час
(0–23)
|
|
tm_min
|
Минуты
(0–59)
|
|
tm_sec
|
Секунды
(0–61, включительно значение 60 и 61 соответствует високосным секундам)
|
|
tm_wday
|
День
недели (0–6, где 0 – воскресенье или понедельник)
|
|
tm_yday
|
Порядковый
номер дня в году (1–366)
|
|
tm_isdst
|
Флаг
летнего времени (-1, 0 или 1)
-1:
информация неизвестна;
0:
нет летнего времени;
1:
действует летнее время.
|
Причем функция localtime() в общем
случае выполняет преобразование любого переданного времени в секундах в такую
структуру данных. Например:
st = time.localtime(0) # 1 января 1970 г.
st = time.localtime(time.time()-50000) # время на 50000 секунд назад
Используя
структуру st, мы, например,
можем вывести дату и время в желаемом для нас формате:
st = time.localtime(time.time()-50000)
print(f"{st.tm_mday:02d}.{st.tm_mon:02d}.{st.tm_year} {st.tm_hour:02d}:{st.tm_min:02d}:{st.tm_sec:02d}")
Получим:
07.07.2025
17:51:15
Функция gmtime()
По аналогии с localtime() работает
функция gmtime(), которая
возвращает не текущее, местное время, а всемирное, гринвичское:
st_lc = time.localtime()
st_gm = time.gmtime()
print(st_lc)
print(st_gm)
Получим:
time.struct_time(tm_year=2025,
tm_mon=7, tm_mday=8, tm_hour=11, tm_min=53, tm_sec=4, tm_wday=1, tm_yday=189,
tm_isdst=0)
time.struct_time(tm_year=2025,
tm_mon=7, tm_mday=8, tm_hour=7, tm_min=53, tm_sec=4, tm_wday=1, tm_yday=189,
tm_isdst=0)
Скорее всего,
часы (tm_hour) будут
различаться, если конечно, вы не живете по гринвичскому времени.
Функция mktime()
Следующая
функция mktime() выполняет
обратное преобразование времени из структуры time.struct_time в вещественное
представление в виде набора секунд. Например:
t = time.time()
st_lc = time.localtime(t)
t2 = time.mktime(st_lc)
print(t) # 1751962448.2555196
print(t2) # 1751962448.0
Как видим,
структура time.struct_time, конечно,
теряет некоторую информацию о долях секунд, но целое число секунд
восстанавливается точно.
При
использовании mktime() следует
учитывать, что данные в структуре time.struct_time должны быть
корректны. Если это не так, то вызов mktime() приведет к
ошибке.
Функция strftime()
Следующая
функция strftime() формирует
строковое представление даты-времени в соответствии с указанным форматом на
основе данных из структуры time.struct_time. Например,
программа:
st = time.localtime()
s_time = time.strftime("%H:%M:%S", st)
print(s_time)
выведет в
консоль строку с текущим временем:
12:33:13
Именно такой
формат вывода был указан в форматной строке "%H:%M:%S". Какие
еще спецификаторы можно здесь прописывать? Основные из них следующие:
%Y – полный год
(например, 2025).
%y – сокращённый
год (например, 25).
%B – название
месяца (January, February и т.д.).
%b – сокращенное
название месяца (Jan, Feb и т.д.).
%m – номер месяца
(1-12).
%d – день месяца
(1-31).
%A – название дня
недели (Monday, Tuesday и т.д.).
%a – сокращенный день
недели (Mon, Tue и т.д.).
%w – день недели в
виде числа (0 – воскресенье, 6 – суббота).
%H – часы в
24-часовом формате (0-23).
%I – часы в
12-часовом формате (1-12).
%p – AM/PM индикатор (AM или PM).
%M – минуты (0-59).
%S – секунды (0-61,
возможно наличие високосных секунд).
%z – часовой пояс в
формате ±HHMM (например,
"+0300").
%Z – символическое
имя часового пояса (например, "CEST").
%c –
локализированное полное представление даты и времени.
%x –
локализированное представление даты.
%X –
локализированное представление времени.
Существуют и
другие спецификаторы. Все их можно посмотреть на странице официальной
документации:
https://docs.python.org/3/library/time.html#time.strftime
Давайте
сформирует строку с выводом года и даты. Это можно записать так:
s_time = time.strftime("%D %H:%M:%S", st) # 07/08/25 12:41:40
s_time = time.strftime("%Y.%m.%d %H:%M:%S", st) # 2025.07.08 12:42:32
И так далее.
Функция strptime()
Следующая функция
strptime() используется для преобразования строки, содержащей дату и время, в
объект struct_time. Название функции расшифровывается как "string parse
time" (парсинг строки времени). Эта функция обычно применяется, когда
имеется информация о дате-времени (например, из логов) и ее нужно привести к
удобному для использования в программе виду. Например:
st = time.localtime()
s_time = time.strftime("%Y.%m.%d %H:%M:%S", st)
parsed_time = time.strptime(s_time, "%Y.%m.%d %H:%M:%S")
print(parsed_time)
Получим структуру
parsed_time с набором
соответствующих данных:
time.struct_time(tm_year=2025,
tm_mon=7, tm_mday=8, tm_hour=12, tm_min=48, tm_sec=38, tm_wday=1, tm_yday=189,
tm_isdst=-1)
Конечно, если
указать неверный формат для парсинга:
parsed_time = time.strptime(s_time, "%H:%M:%S")
то получим
ошибку ValueError.
Это основные
функции модуля time(). Конечно, существуют и другие. Как всегда, полную
информацию можно посмотреть в документации по стандартной библиотеке языка Python:
https://docs.python.org/3/library/time.html
Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs