Программирование и научные вычисления на языке Python/§7/Приложение

Часто в различных манипуляциях с данными о времени возникает необходимость считывания системного времени, сравнения дат и т.д. Для этого в Python имеется два модуля: time, datetime и calendar. Первый — time — является наиболее низкоуровневым, datetime предоставляет больше возможностей для работы с датами, calendar — позволяет отображать календари и делать некоторые близкие операции.

Модуль time править

В модуле time оперирование временем происходит в основном при помощи двух типов данных: времени в секундах и данных в виде объекта struct_time, имеющегося интерфейс кортежа из девяти числовых элементов: (четырехзначный год, месяц [1..12], день [1..31], час [0..23], минута [0..59], секунда [0..61], день недели [0..6, 0 — понедельник], день в году [0..366], DST (-1, 0, 1, значение для перехода между летним и зимнем временем, определяемый местными законами). Рассмотрим некотрые функции модуля:

time.altzone — смещение часового пояса от нулевого меридиана в секундах: если пояс западнее — число положительное, если восточнее — отрицательное:

>>> import time
>>> time.altzone, time.altzone/3600
(-14400, -4)

time.asctime(t) — преобразует кортеж или struct_time в строку вида "Thu Sep 27 16:42:37 2012". Если аргумент не указан, используется текущее время:

>>> time.asctime()
'Sat Sep 24 20:40:32 2016'

time.clock() ведет себя различным образом в Unix и Windows. В Unix функция возвращает текущее время, в Windows — время в секундах, прошедшее с момента первого вызова данной функции:

>>> time.clock()
7.895118093202659e-07
>>> time.clock()
5.954773605514898

time.ctime(t) — преобразует время, выраженное в секундах с начала эпохи в строку вида "Thu Sep 27 16:42:37 2012". Ели время не задано, функция возвращает текущее время. Под началом эпохи понимается условная дата 1 января 1970-го года:

>>> time.ctime(0)
'Thu Jan 01 03:00:00 1970'
>>> time.ctime()
'Sat Sep 24 20:53:04 2016'

time.localtime(t) — преобразует время, выраженное в секундах с начала эпохи в struct_time:

>>> time.localtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=24, tm_hour=21, tm_min=2, tm_sec=3, tm_wday=5, tm_yday=268, tm_isdst=0)

time.mktime(t) — функция, обратная предыдущей, преобразует кортеж или struct_time в число секунд с начала эпохи:

>>> time.mktime(time.localtime())
1474740201.0
>>> time.ctime(time.mktime(time.localtime()))
'Sat Sep 24 21:04:40 2016'
>>> time.ctime()
'Sat Sep 24 21:05:05 2016'

time.sleep(t) — функция задержки, которая приостанавливает выполнение программы на заданное количество секунд. Функция не возвращает никаких объектов:

>>> print time.clock(), time.sleep(10), time.clock()
1579.96195935 None 1589.96316967


time.strftime(строка формата, t) — предоставляет широкие возможности для преобразования кортежа или struct_time в строку по заданному формату. Если время не указано, используется текущее. Различные форматы в примерах:

>>> time.strftime('%H:%M:%S') # час:минута:секунда
'22:34:48'
>>> time.strftime('%X') # но то же самое можно сделать так
'22:35:02'
>>> time.strftime('%x') # можно вывести дату отдельно в формате mm/dd/yy
'09/24/16'
>>> time.strftime('%c') # а можно вместе HH:MM:SS
'09/24/16 22:35:30'
>>> time.strftime('%d.%m.%y') # но в России для дат обычно принят другой порядок
'24.09.16'
>>> time.strftime('%Y, %y') # можно указать год, а можно год без столетия
'2016, 16'
>>> time.strftime('%a is short for %A, and %b is for %B') # названия дня недели и месяца можно записать сокращенно и целиком
'Sat is short for Saturday, and Sep is for September'
>>> time.strftime('day %j, week %W') # в рабочих планах бывает важен номер дня в году, а еще чаще (например, в учебных заведениях с четными и нечетными неделями) — номер недели (нулевая начинается с понедельника)
'day 268, week 38'


time.strptime(string[, format]) — преобразует строку в соответствии с форматом (обозначения те же, что для time.strftime()):

>>> time.strptime('20.05.2016', '%d.%m.%Y')
time.struct_time(tm_year=2016, tm_mon=5, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=141, tm_isdst=-1)


time.time() — время, выраженное в секундах с начала эпохи.

>>> time.time()
1474741928.878

Модуль datetime править

Этот модуль облегчает, например, арифмитические операции над датами. Модуль datetime содержит дополнительные классы: date — для дат, time — для времени, комбинированный datetime, timedelta — для интервалов времени, то есть разностей между объектами предыдущих классов, и tzinfo — для временных зон.

Ссылки править