Введение в тему
Программисты часто сталкиваются с задачами по обработке времени. Эти задачи не являются тривиальными, поскольку существует множество способов представления этих данных. Они зависят от региона и личных предпочтений человека, записывающего их. В этом уроке мы рассмотрим модуль стандартной библиотеки time Python, который предназначен для упрощения таких работ.
Для начала работы с этим модулем его необходимо добавить в Ваш код:
import time
Python time time
ОС Unix была создана в 1970 году, а значит файл этой системы не мог быть создан ранее 1970-01-01. Поэтому для данной системы была принята точка отсчёта времени — 1 января 1970, 00:00:00 (UTC). Её назвали началом эпохи и время стали считать, как количество секунд (миллисекунд), прошедших с этого момента. Такой подход, де-факто, стал широко распространённым стандартом из-за однозначности определения времени. Функция time.time() даёт возможность узнать сколько на данный момент прошло секунд от начала эпохи.
import time
секунд_с_начала_эпохи = time.time()
print("С 1 января 1970, 00:00:00 прошло", секунд_с_начала_эпохи, "секунд.")
#Вывод:
С 1 января 1970, 00:00:00 прошло 1625195121.0941737 секунд.
Python time ctime
Для того, чтобы перевести результат вызова time.time() в местное время предусмотрена функция time.ctime(). В неё надо передать значение, которое вернула time.time() и time.ctime() вернёт строку, содержащую время в более привычном для человека виде.
import time
секунд_с_начала_эпохи = time.time()
print("С 1 января 1970, 00:00:00 прошло", секунд_с_начала_эпохи, "секунд.")
местное_время = time.ctime(секунд_с_начала_эпохи)
print("Это", местное_время, "по местному времени.")
#Вывод:
С 1 января 1970, 00:00:00 прошло 1625203810.2798948 секунд.
Это Fri Jul 2 08:30:10 2021 по местному времени.
Python time sleep
time.sleep() предназначена для остановки выполнения программы. Это функция используется чаще других, поскольку область её применения выходит за рамки обычной обработки времени.
В качестве параметра необходимо передать время задержки в секундах. Проверим её работу:
import time
время_запуска = time.time()
time.sleep(5.16)
время_завершения = time.time()
print("Время запуска", время_запуска)
print("Время завершения", время_завершения)
print("Прошло времени", время_завершения-время_запуска)
#Вывод:
Время запуска 1625204320.242042
Время завершения 1625204325.4020572
Прошло времени 5.160015106201172
Класс time struct_time
Класс struct_time модуля time представляет собой тип набора значений времени, возвращаемых функциями time.gmtime(), time.localtime() и time.strptime(). Значения могут быть доступны по индексу и по имени атрибута. Данная коллекция является именованным кортежем.
Присутствуют следующие значения:
Класс struct_time состоит из следующих атрибутов:
tm_year: возвращает год по местному времени.
tm_hour: возвращает час конкретного местного времени.
tm_min: возвращает значение минут определенного местного времени.
tm_sec: возвращает значение секунд определенного местного времени.
tm_mon: возвращает месяц по местному времени.
tm_mday: возвращает дату месяца по местному времени.
tm_wday: возвращает значение дней недели, т.е. с 0 понедельника по 6 воскресенье.
tm_yday: возвращает номер конкретного дня в диапазоне от 1 до 366.
Вот как этот объект выглядит:
import time
текущее_время = time.localtime()
print(текущее_время)
#Вывод:
time.struct_time(tm_year=2021, tm_mon=7, tm_mday=2, tm_hour=8, tm_min=49, tm_sec=4, tm_wday=4, tm_yday=183, tm_isdst=0)
Python time localtime
time.localtime() возвращает значение по местному времени имеющее тип struct_time. Имеет необязательный параметр, указывающий на смещение c начала эпохи.
import time
локалтайм_со_смещением_15_секунд = time.localtime(15)
print("Вся структура:", локалтайм_со_смещением_15_секунд)
print("Смещение в секундах:", локалтайм_со_смещением_15_секунд.tm_sec - time.localtime(0).tm_sec)
#Вывод:
Вся структура: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0)
Смещение в секундах: 15
Если в localtime() не предать параметр смещения, то функция вернёт текущее время.
Python time gmtime
gmtime() делает почти то же самое, но значение возвращает UTC.
import time
гмтайм_со_смещением_15_секунд = time.gmtime(15)
print("Вся структура:", гмтайм_со_смещением_15_секунд)
print("Смещение в секундах:", гмтайм_со_смещением_15_секунд.tm_sec - time.gmtime(0).tm_sec)
текущий_гмтайм = time.gmtime()
print("Текущее время по международному времени:", текущий_гмтайм)
#Вывод:
Вся структура: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0)
Смещение в секундах: 15
Текущее время по международному времени: time.struct_time(tm_year=2021, tm_mon=7, tm_mday=2, tm_hour=6, tm_min=3, tm_sec=22, tm_wday=4, tm_yday=183, tm_isdst=0)
Если в time.gmtime () не предать параметр смещения, то функция вернёт значение текущего времени по Гринвичу.
Python time mktime
time.mktime() преобразует структуру времени в секунды формата ОС Unix. Возвращает количество секунд и милисекунд. Является реверсивной по отношению к функции localtime().
import time
локалтайм_со_смещением_15_секунд = time.localtime(15)
мктайм_со_смещением_15_секунд = time.mktime(локалтайм_со_смещением_15_секунд)
print("Результат функции time.localtime(15):", локалтайм_со_смещением_15_секунд)
print("Результат функции time.mktime(локалтайм_со_смещением_15_секунд):", мктайм_со_смещением_15_секунд)
#Вывод:
Результат функции time.localtime(15): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0)
Результат функции time.mktime(локалтайм_со_смещением_15_секунд): 15.0
Python time asctime
asctime() преобразует tuple или значение типа struct_time, в 24-символьную строку следующей формы – «Thu Jan 1 03:00:00 1970».
Например:
import time
локалтайм_со_смещением_15_секунд = time.localtime(15)
асктайм_со_смещением_15_секунд = time.asctime(локалтайм_со_смещением_15_секунд)
print("Результат функции time.localtime(15):", локалтайм_со_смещением_15_секунд)
print("Результат функции time.asctime(локалтайм_со_смещением_15_секунд):", асктайм_со_смещением_15_секунд)
#Вывод:
Результат функции time.localtime(15): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0)
Результат функции time.asctime(локалтайм_со_смещением_15_секунд): Thu Jan 1 03:00:15 1970
Python time strftime
time.strftime() конвертирует кортеж или объект struct_time, который возвращают time.gmtime() или time.localtime() в значение, имеющее тип стринг и вид, зависящий от переданного аргумента формата.
Когда время не передаётся в аргументы функции, она использует текущее время, которое возвращает localtime() . Формат должен иметь строковый тип.
import time
локалтайм_со_смещением_15_секунд = time.localtime(15)
стрфтайм_со_смещением_15_секунд = time.strftime("%m/%d/%Y, %H:%M:%S", локалтайм_со_смещением_15_секунд)
print("Результат функции time.localtime(15):", локалтайм_со_смещением_15_секунд)
print("Результат функции time.strftime(локалтайм_со_смещением_15_секунд):", стрфтайм_со_смещением_15_секунд)
#Вывод:
Результат функции time.localtime(15): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0)
Результат функции time.strftime(локалтайм_со_смещением_15_секунд): 01/01/1970, 03:00:15
Здесь %Y, %m, %d, %H и прочие — это элементы, которыми задаётся форматирование.
%Y — год [0001,…, 2019, 2020,…, 9999]
%m — месяц [01, 02, …, 11, 12]
%d — день месяца в виде десятичного числа [01,31]. %H — час [00, 01, …, 22, 23
%M — минута в виде десятичного числа [00,59]
%S — секунда [00, 01, …, 58, 61]
%a — сокращенное название дня недели
Python time strptime
time.strptime() – обратная по отношению к функции time.strftime(). Она разбирает строку, содержащую время и возвращает struct_time.
import time
локалтайм_со_смещением_15_секунд = time.localtime(15)
стрфтайм_со_смещением_15_секунд = time.strftime("%m/%d/%Y, %H:%M:%S", локалтайм_со_смещением_15_секунд)
стрптайм_со_смещением_15_секунд = time.strptime(стрфтайм_со_смещением_15_секунд, "%m/%d/%Y, %H:%M:%S")
print("Результат функции time.localtime(15):", локалтайм_со_смещением_15_секунд, sep='\n')
print("Результат функции time.strftime(локалтайм_со_смещением_15_секунд):", стрфтайм_со_смещением_15_секунд, sep='\n')
print("Результат функции time.strptime(стрфтайм_со_смещением_15_секунд, '%m/%d/%Y, %H:%M:%S'):", стрптайм_со_смещением_15_секунд, sep='\n')
#Вывод:
Результат функции time.localtime(15):
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0)
Результат функции time.strftime(локалтайм_со_смещением_15_секунд):
01/01/1970, 03:00:15
Результат функции time.strptime(стрфтайм_со_смещением_15_секунд, '%m/%d/%Y, %H:%M:%S'):
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=-1)