time库介绍
起因:开发过程中遇到了时间格式的更改需求。源时间格式从zstack接口获取,类似这样的格式Dec 14, 2019 7:55:13 PM,要转换成目标格式,类似这样2019-12-14 19:55:13。1970-01-01 00:00:00是python时间起始的点。python表示的时间范围是1970年1月1日到2038年1月19日。
一、time
time是python中处理时间的标准库
计算时间的表达
提供获取系统时间并格式化输出功能
提供系统精确计时功能,用于程序性能分析
time库包括三类函数
时间获取:time() ; ctime() ; gmtime()
时间格式化:strftime() ; strptime()
程序计时:sleep() ; perf_counter()
时间获取
函数 | 描述 |
---|---|
time() | 获取当前时间截,即计算机内部时间值,浮点数。>>>time.time() |
ctime() | 获取当前时间并以易读方式表示,返回字符串。>>>time.ctime() |
gmtime() | 获取当前时间,表示为计算机可处理的时间格式。>>>time.gmtime() |
时间格式化
将时间以合理的方式展示出来
格式化:类似字符串格式化,需要有展示模板
展示模板由特定的格式化控制符组成
函数 | 描述 |
---|---|
strftime(tpl,ts) | tpl是格式化模板字符串,用来定义输出效果,ts是计算机内部时间类型变量 |
strptime(str,tpl) | str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输入效果 |
格式化字符串 | 日期/时间说明 |
---|---|
%Y | 年份 |
%m | 月份 |
%B | 月份名称 |
%b | 月份名称缩写 |
%d | 日期 |
%A | 星期 |
%a | 星期缩写 |
%H | 小时(24h制) |
%h | 小时(12h制) |
%p | 上/下午 |
%M | 分钟 |
%s | 秒 |
程序计时
程序计时应用广泛
程序计时指测量起止动作所经历时间的过程
函数 | 描述 |
---|---|
perf_counter() | 返回一个CPU级别的精确时间计数值,单位为秒,由于这个计数值起点不确定,连续调用差值才有意义。>>>start = time.perf_counter();>>>end = time.perf_counter();>>>end-start |
sleep(s) | s拟休眠时间,单位是秒,可以是浮点数。>>>def wait(): time.sleep() ; >>>wait() |
datetime库
以不同格式显示日期和时间是程序中做常用到的功能,它提供了一系列由简单到复杂的时间处理方法。datetime库可以从系统中获得时间,并以用户选择的格式输出。
datetime库以类的方式提供多种日期和时间表达方式
datetime.date:日期表示类,可以表示年、月、日等
datetime.time:时间表示类,可以表示小时、分钟、秒、毫秒等
datetime.datetime:日期和时间表时的类,功能覆盖date和time类
datetime.timedalta:与时间间隔有关的类
datetime.tzinfo:与时区有关的信息表示类
创建datetime对象有三种方法:
1、datetime.now()获当前日期和时间对象
作用:返回一个datetime类型,表示当前的日期和时间,精确到微秒
参数:无
2、datetime.utcnow():返回一个datetime类型,表示当前日期和时间的UTC表示,精确到微秒。
3、datetime.datetime():返回一个datetime类型,表示指定的日期和时间,可以精确到微秒。
datetime类的常用属性
属性 | 描述 |
---|---|
someday.min | 固定返回datetime的最小时间对象,datetime(1,1,1,0,0) |
someday.max | 固定返回datetime的最大时间对象,datetime(9999,12,31,23,59,59,999999) |
someday.year | 返回someday包含的年份 |
someday.month | 返回someday包含的月份 |
someday.day | 返回someday包含的日期 |
someday.hour | 返回someday包含的小时 |
someday.year | 返回someday包含的年份 |
someday.minute | 返回someday包含的分钟 |
someday.second | 返回someday包含的秒钟 |
someday.microsecond | 返回someday包含的微秒值 |
datetime类常用时间格式化方法
属性 | 描述 |
---|---|
someday.isoformat() | 采用ISO8601标准显示时间 |
someday.isoweekday() | 根据日期计算星期后返回1—7,对应星期一到星期日 |
someday.strftime(format) | 根据格式化字符串format进行格式化显示的方法 |
calendar库
calendar模块主要由Calendar类与一些模块方法构成,Calendar类又衍生了一些子孙类来帮助我们实现一些特殊的功能
Calendar模块方法
函数 | 描述 |
---|---|
setfirstweekday(firstweekday) | 指定一周的第一天,0是星期一,…,6为星期日 |
firstweekday() | 返回一周的第一天,0是星期一,…,6为星期日 |
isleap(year) | 判断指定是否是闰年,闰年为True,平年为False |
leapdays(y1, y2) | 返回y1与y2年份之间的闰年数量,y1与y2皆为年份。包括起始年,不包括结束年 |
weekday(year, month, day) | 获取指定日期为星期几 |
weekheader(n) | 返回包含星期的英文缩写,n表示英文缩写所占的宽度 |
monthrange(year, month) | 返回一个由一个月第一个天的星期与当前月的天数组成的元组 |
monthcalendar(year, month) | 返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期 |
prmonth(theyear, themonth, w=0, l=0) | 打印一个月的日历,theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行 |
month(theyear, themonth, w=0, l=0) | 返回一个月的日历的多行文本字符串。theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行 |
prcal(year, w=0, l=0, c=6, m=3) | 打印一年的日历,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列 |
calendar(year, w=2, l=1, c=6, m=3) | 以多行字符串形式返回一年的日历,w每个单元格宽度,默认2,内部已做处理,最小宽度为2,l每列换l行,默认为1,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列 |
calendar.Calendar(firstweekday=0)类
firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日
函数 | 描述 |
---|---|
iterweekdays() | 获取一周的数字的迭代器,迭代器的第一个值与firstweekday的值相同 |
itermonthdates(year, month) | 获取一个月日期的迭代器,此迭代器会返回指定月份的所有日期,包括月份开始那周的所有日期和月份结束那周的所有日期 |
itermonthdays(year, month) | 返回一个月天数的迭代器(不是当前月份的天数为0),此迭代器将返回指定月份的日期数字,包括月份开始那周的所有日期和月份结束那周的所有日期 |
itermonthdays2(year, month) | 返回一个月天数与星期的迭代器(不是当前月份的天数为0),此迭代器将返回指定月份的日期数字与星期几所代表的数字组成的元组,包括月份开始那周的所有日期和月份结束那周的所有日期 |
monthdatescalendar(year, month) | 返回一个月日期列表,按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期 |
monthdayscalendar(year, month) | 返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期 |
monthdays2calendar(year, month) | 返回一个月中天数与星期的列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期 |
yeardatescalendar(year, width=3) | 返回一年中所有的日期,为一个4维数组。width表示将一年中12个月份进行划分,每width个月为一份,每一份包含各个月份,每个月份包含周,每周包含日期信息。包括月份开始那周的所有日期和月份结束那周的所有日期 |
yeardayscalendar(year, width=3) | 返回一年中每个月的天数,为一个4维数组。width表示将一年中12个月份进行划分,每width个月为一份;每一份包含各个月份,每个月份包含周,每周包含天数信息(不是当前月份的天数为0)。包括月份开始那周的所有日期和月份结束那周的所有日期 |
yeardays2calendar(year, width=3) | 返回一年中农每个月的天数与星期的元组,为一个4维的元组列表。width表示将一年中12个月份进行划分,每width个月为一份;每一份包含各个月份,每个月份包含周,每周包含天数与星期的元组信息(不是当前月份的天数为0)。包括月份开始那周的所有日期和月份结束那周的所有日期 |
random库
python内置的random库主要用于产生各种分布的伪随机数序列。random库采用梅森旋转算法生成伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用。
random库解析
random库的常用函数
函数 | 描述 |
---|---|
seed(a=None) | 初始化随机数种子,默认值为当前系统时间 |
random() | 生成一个[0.0,1.0)之间的随机小数 |
randint(a,b) | 生成一个[a,b]之间的整数 |
getrandbits(k) | 生成一个k比特长度的随机整数 |
randrange(start,stop[,step]) | 生成一个[start,stop)之间以step为步数的随机整数 |
uniform(a,b) | 生成一个[a,b]之间的随机小数 |
choice(seq) | 从序列类型,例如列表中随机返回一个元素 |
shuffle(seq) | 将序列类型中的元素随机排列,返回打乱后的序列 |
sample(pop,k) | 从pop类型中随机选取k个元素,以列表类型返回 |
random库的引用方法与math库一样,可以采用下面两种方式实现:
import random
或
from random import*
使用random库的一些例子如下,这些语句每次执行后的结果不一定一样
注:本文根据嵩天老师《python语言程序设计基础》做的笔记