Функции localtime(), gmtime(), mktime(), strftime() и strptime()

Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs

Смотреть материал на YouTube | RuTube

До сих пор мы с вами, в основном, имели дело с числовым представлением времени, если не считать функцию 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

Видео по теме