Библиотека datetime используется для работы в Python со временем и датами, позволяя представлять данную информацию в наиболее удобной форме.
Она состоит из нескольких классов. Благодаря их наличию, мы можем получить доступ к многим полезным методам:
- Получение текущих системных даты и времени;
- Вычисления разницы между датами и другие арифметические операции;
- Операциям, которые позволяют сравнивать время;
- Форматированный вывод информации о дате и времени.
Текущее время в Python
Работа методов из модуля time основывается на общепринятой системе описания времени, которая справедлива для Unix, а также для POSIX-совместимых ОС. Согласно ее концепции, текущее время представляется в виде обыкновенного вещественного значения в секундах, прошедших с момента начала эпохи и до сегодняшнего дня. Отправной точкой для времени считается 1 января 1970 года, когда счетчик секунд имел полностью нулевое значение.
С тех пор это число постоянно растет, позволяя людям работать с различными видами дат в максимально точном представлении. В случае необходимости секунды переводятся в часы, дни, месяцы и годы, предоставляя пользователю удобный вид отображения времени. Чтобы увидеть количество секунд, прошедших с момента начала эпохи, достаточно вызвать метод time(). Но перед этим необходимо подключить модуль time с помощью операции импорта.
Чтобы отобразить текущую дату в более комфортном виде, стоит передать функции print результат работы метода ctime(), не забыв произвести импорт соответствующей ему библиотеки time.
|
1 2 3 4 |
import time print(time.ctime()) >>Tue Oct 23 10:18:23 2018 |
Методы
Для работы с временем в стандартной библиотеке языка Python имеется множество самых разных методов. Наиболее популярные функции, реализованные в модуле time, описаны в следующей таблице. Здесь можно найти их название, а также краткую характеристику.
| Метод | Характеристика |
| time() | возвращает текущее время, прошедшее с начала 1970 года в секундах |
| ctime(s) | возвращает местное время в строке или время, полученное из s секунд |
| clock() | возвращает процессорное время, прошедшее с момента первого вызова этой функции, точность больше 1 микросекунды |
| sleep(s) | останавливает ход выполнения программы ровно на s секунд |
| strftime(s) | преобразует переданное в качестве аргумента время s в строку по формату |
| strptime(s) | разбирает строку s и преобразует в объект времени по формату |
| mktime(s) | преобразует время s в количество секунд с начала 1970 года |
| localtime(s) | возвращает объект, представляющий местное время или время s |
Форматированный вывод
Принцип работы метода ctime() заключается в представлении секундного вещественного значения в более удобном виде, благодаря автоматическому форматированию. Некоторым пользователям предложенный подобным образом вывод данных может показаться чересчур сложным для восприятия либо же недостаточно информативным. Именно поэтому методы модуля time позволяют создавать свои уникальные типы форматирования для дат. В данном случае речь пойдет о функции strftime, принимающей в качестве параметров текущее время и шаблон, который будет использоваться для форматирования полученного объекта.
В следующем примере демонстрируется вывод значения, переданного функцией localtime() в strftime. То есть, мы в Python получим текущее время и выведем его в отформатированном виде. Первым аргументом метода strftime является строка с некоторым набором правил для форматирования, каждое из которых указано при помощи символа %. В результате, на экране выводится информация, включающая название месяца, число и год.
|
1 2 3 4 |
import time print(time.strftime("Today is %B %d, %Y.", time.localtime())) >>Today is October 23, 2018. |
Также, как и в классе date, пользуясь time, можно получать доступ к отдельным значениям созданного ранее объекта: часам, минутам, секундам и микросекундам. Для этого нужно применить оператор точка, после чего указать конкретное свойство. В следующем примере демонстрируется вывод информации, представляющей отдельные сведения об объекте a.
|
1 2 3 4 5 6 7 8 9 10 11 |
import datetime a = datetime.time(16, 3, 49, 23578) print(a.hour) print(a.minute) print(a.second) print(a.microsecond) >>16 >>3 >>49 >>23578 |
Форматирование
|
1 2 3 4 5 6 7 8 |
import datetime a = datetime.datetime.today().strftime("%d.%m.%Y") b = datetime.datetime.today().strftime("%H:%M:%S") print(a) print(b) >>08.11.2018 >>11:41:04 |
Доступные типы форматов для вывода через консоль располагаются в следующей таблице. Здесь можно найти их обозначения, а также краткое описание того, что именно они делают.
| Формат | Значение |
| %a | название дня недели в сокращенном виде |
| %A | название дня недели в полном виде |
| %w | номер дня недели в виде целого числа |
| %d | номер дня месяца в виде целого числа |
| %b | название месяца в сокращенном виде |
| %B | название месяца в полном виде |
| %m | номер месяца в числовом представлении |
| %y | номер года без столетия |
| %Y | номер года в полном представлении |
| %H | количество часов в 24-часовом формате |
| %I | количество часов в 12-часовом формате |
| %p | до полудня или после полудня в 12-часовом формате |
| %M | количество минут в виде целого числа |
| %S | количество секунд в виде целого числа |
| %f | количество микросекунд в виде целого числа |
| %z | часовой пояс в формате UTC |
| %Z | название часового пояса |
| %j | номер дня в году |
| %U | номер недели в году, если считать с воскресенья |
| %w | номер недели в году, если считать с понедельника |
| %c | местное представление даты и времени |
| %x | местное представление даты |
| %X | местное представление времени |
| %% | символ процента |
Как и в случае с time и date, в классе datetime пользователь в состоянии получать доступ к отдельным свойствам созданного объекта (годам, месяцам, дням, часам, минутам, секундам и микросекундам. В следующем примере кода демонстрируется вывод данных значений.
Применение метода sleep
Выполнение многих задач в программировании так или иначе связано с течением времени. Иногда программа должна прекращать ход своего выполнения на определенное количество секунд, минут или часов. Это вполне может потребоваться в тех случаях, когда компьютер взаимодействует с какой-либо внешней системой, например, базой данных, которая должна завершить выполнение собственных задач, прежде чем перейти к следующему действию.
Перевести программу в ждущий режим, временно заморозив ее работу, можно при помощи метода sleep, доступного в модуле time. Его единственным аргументом является количество секунд, которое следует выждать программе, прежде чем перейти к дальнейшему шагу из прописанного алгоритма. В следующем фрагменте кода функция sleep работает 10 секунд
Как можно увидеть из результатов выполнения кода, вначале на экран выводится стартовое сообщение, после чего программа прекращает свою работу ровно на 10 секунд, поскольку метод sleep получает переменную pause в качестве аргумента. Затем отображается последняя запись, информирующая пользователя о том, какое количество секунд длилась задержка.
Зачастую нам требуется сделать задержку в миллисекундах. Обратите внимание, что параметр функции sleep не обязательно должен быть целым числом.
Таким образом, чтобы сделать задержку в 100 миллисекунд, надо написать time.sleep(0.1).
Время выполнения программы
Существует множество разных задач, для решения которых нужно найти время, потраченное на работу программы либо отдельных ее блоков. Чтобы найти данную величину, достаточно посчитать разницу в секундах между точкой старта определенной функции и местом, где она завершает свою работу. В следующем примере демонстрируется применение методов time() для получения текущего времени, чтобы в конечном итоге выявить, как долго работал блок кода. Метод sleep() здесь увеличивает время выполнения программы на 5 секунд.
|
1 2 3 4 5 6 7 8 |
import time start = time.time() time.sleep(5) finish = time.time() result = finish - start print("Program time: " + str(result) + " seconds.") >>Program time: 5.005090236663818 seconds. |
Заключение
Используя стандартный библиотечный модуль time в Python 3, можно всячески взаимодействовать с информацией о текущем времени. Таким образом, использование библиотеки дает возможность:
- Прерывать выполнение программы на заданное количество секунд.
- Отображать информацию о времени, прошедшем с начала эпохи.
- Преобразовывать значение системного времени к удобному виду.
- Измерять время выполнения программы целиком или ее отдельных модулей.