Python Notes (22): модуль времени и модуль календаря

Python Технологии Nuggets призывают к публикации
Python Notes (22): модуль времени и модуль календаря

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~

Есть много способов работать со временем и датой в Python, и преобразование даты является наиболее распространенным. Временные интервалы в Python представляют собой десятичные числа с плавающей запятой в секундах.

отметка времени

В Python текущее время в основном хранится в виде временной метки. Единицы меток времени лучше всего подходят для арифметики дат. Но даты до 1970 года не могут быть представлены таким образом. Не так уж и далеко, UNIX и Windows поддерживают только до 2038 года.

отметка времениОтносится к общему количеству секунд с 01 января 1970 года 00:00:00 по Гринвичу до настоящего времени. С точки зрения непрофессионала, временная метка — это полная проверяемая часть данных, которая может указывать на то, что часть данных уже существует в определенный момент времени. В основном предлагается предоставить пользователям электронные доказательства, подтверждающие время создания определенных данных пользователей.

используется в питонеtimeмодульныйtimeфункция для получения текущей метки времени

образец кода

import time
time_stamp = time.time()
print("当前的时间戳为:", time_stamp)  # 当前的时间戳为: 1590585400.6808906

кортеж времени

Многие функции в Python работают со временем, объединяя 9 групп чисел в один элемент.

серийный номер Атрибуты ценность
0 tm_year 2008
1 tm_mon от 1 до 12
2 tm_mday от 1 до 31
3 tm_hour от 0 до 23
4 tm_min от 0 до 59
5 tm_sec от 0 до 61 (60 или 61 — дополнительная секунда)
6 tm_wday от 0 до 6 (0 — понедельник)
7 tm_yday день года, от 1 до 366
8 tm_isdst Будь то летнее время, значения: 1 (летнее время), 0 (не летнее время), -1 (неизвестно), по умолчанию -1

Ссылаться научебник для новичков

получить текущее время

Преобразование из возвращенной метки времени в кортеж времени может быть выполнено с помощьюtimeмодульныйlocaltime()функция;time.gmtime([secs])также возвращает кортеж времени

образец кода

import time
time_stamp = time.time()  # 获取当前时间戳
localtime = time.localtime(time_stamp)
print(localtime)
# time.struct_time(tm_year=2020, tm_mon=5, tm_mday=27, tm_hour=21, tm_min=36, tm_sec=42, tm_wday=2, tm_yday=148, tm_isdst=0) 

время форматирования

можно использоватьtimeмодульныйasctimeФункция форматирует кортеж времени в простейшем читаемом виде, и если аргумент не задан, то означает текущее время

time.ctime([secs])Этот параметр принимает временную метку в качестве единицы измерения и возвращает дату в читаемом виде, не присваивая параметру эквивалентноtime.asctime()

образец кода

import time
time_stamp = time.time()
localtime = time.asctime(time.localtime(time_stamp))
print("当前时间为:", localtime)  # 当前时间为: Wed May 27 21:47:48 2020

дата формата

Символы форматирования даты в Python:

символ описывать
%y Двузначный год (00-99)
%Y Четырехзначный год (0000-9999)
%m Месяц (01-12)
%d день месяца (1-31)
%H 24-часовые часы (0-23)
%I 12-часовые часы (01-12)
%M минуты (00=59)
%S Секунды (00-59)
%a местное сокращенное название дня недели
%A местное полное название недели
%b местное сокращенное название месяца
%B местное полное название месяца
%c Локальное соответствующее представление даты и представление времени
%j день года (001-366)
%p Эквивалент местного AM или PM.
%U Номер недели в году (00-53) Воскресенье – начало недели
%w Неделя (0-6), воскресенье — начало недели
%W Номер недели в году (00-53) Понедельник – начало недели
%x Местное соответствующее представление даты
%X представление местного времени
%Z Название текущего часового пояса
%% Сам знак %

time mktime(结构化的时间或者完整的9位元组元素)функция выполняется сgmtime(), localtime()Противоположная операция, которая принимает объект struct_time в качестве аргумента, возвращает число с плавающей запятой, представляющее время в секундах. Если введенное значение не является допустимым временем, будет выдано сообщение об ошибке OverflowError или ValueError.

образец кода

import time
time_stamp = time.time()
print(time_stamp)  # 1590590683.0062041
# 4位数的年份-月份-天数 24小时制:分钟:秒 周几 今年的第几天
localtime = time.strftime("%Y-%m-%d %H:%M:%S %A %j", time.localtime(time_stamp))
print(localtime)  # 2020-05-27 22:44:43 Wednesday 148
# 转变为时间元组
localtime_tuple = time.strptime(localtime, "%Y-%m-%d %H:%M:%S %A %j")
print(localtime_tuple)  # time.struct_time(tm_year=2020, tm_mon=5, tm_mday=27, tm_hour=22, tm_min=44, tm_sec=43, tm_wday=2, tm_yday=148, tm_isdst=-1)

# 将时间元组转换为秒(时间戳)
time_stamp = time.mktime(localtime_tuple)
print(time_stamp)  # 1590590683.0  # 与一开始获取的基本相等

Получить процессорное время

time.perf_counter()Возвращает точное время таймера (время работы системы), включая время сна всей системы. Поскольку базовая точка возвращаемого значения не определена, допустима только разница между результатами последовательных вызовов.

time.process_time()Возвращает сумму процессорного времени текущего выполнения процесса, исключая время сна. Поскольку базовая точка возвращаемого значения не определена, допустима только разница между результатами последовательных вызовов.

time.sleep()Функция задерживает выполнение вызывающего потока, а параметр secs может указывать на количество секунд, указывающее время, в течение которого процесс приостановлен.

образец кода

import time
# 获取系统运行该函数的时间
print(time.perf_counter())  # 0.0208446
time.sleep(2)
# 读取系统运行该函数的时间,
print(time.perf_counter())  # 2.0208952  # 两者的差距微乎其微
# 获取当前进程执行 CPU 的时间总和
print(time.process_time())  # 0.015625  # 不包含睡眠时间

Модуль календаря

CalendarМодуль календаря, все функции в этом модуле связаны с календарем, например, печать ежемесячного календаря символов определенного месяца.

функция описывать
calendar.calendar(year,w=2,l=1,c=6) Возвращает годовой календарь в многострочном строковом формате, где 3 месяца находятся в одной строке, а расстояние между интервалами равно c. Дневной интервал ширины составляет w символов. Длина каждой линии 21*W+18+2*C. l — количество строк в неделю.
calendar.month(year,month,w=2,l=1) Возвращает многострочный строковый формат год год месяц месяц календарь, две строки заголовков, одну строку для недели. Дневной интервал ширины составляет w символов. Длина каждой строки 7*w+6. l — количество строк в неделю.
calendar.monthrange(year,month) Возвращает два целых числа. Первое — это день недели месяца, а второе — день месяца. День недели от 0 (понедельник) до 6 (воскресенье).
calendar.leapdays(y1,y2) Возвращает общее количество високосных лет между Y1 и Y2.
calendar.isleap(year) Определяет, является ли год високосным, и возвращает True, если это високосный год, и false в противном случае.

образец кода

import calendar
# 打印今年的年历
print(calendar.calendar(2020))
# 打印本月的月历
print(calendar.month(2020, 5))
# monthrange方法
print(calendar.monthrange(2020, 5))  # (4, 31)  # 5月份的第一天是周五一共31天,因为周一是0所以4是周五
# 计算1000年到2000年的闰年总数
print(calendar.leapdays(1000, 2000))  # 242
# 判断今年是否为闰年
print(calendar.isleap(2020))  # True

time.strftime(fmt[,tupletime])Принимает кортеж времени и возвращает местное время в виде удобочитаемой строки в формате, определяемом fmt.

time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')Разбирает строку времени в кортеж времени в соответствии с форматом fmt.