这次来整理一下标准库time、datatime、calendar、random的相关知识及使用方法~
time库
time库是Python中处理时间的标准库
它基本上有以下三种用途:
- 计算机时间的表述
- 提供获取系统时间并格式化输出功能
- 提供系统级精确计时功能,用于程序性能分析
调用time库的基本格式如下
import time
time.<b>()
time库包括三类函数
- 时间获取:time()、ctime()、gmtime()
- 时间格式化:strftime()、strptime()
- 程序计时:sleep()、perf_counter()
接下来介绍一下time库的使用
函数 | 描述 |
---|---|
time() | 获取当前时间戳,即计算机内部时间值,浮点数 |
ctime() | 获取当前时间并以易读方式表示 |
gmtime() | 获取当前时间,表示为计算机可处理的时间格式 |
时间格式化:将时间以合理的方式展示出来
- 格式化:类似字符串格式化,需要有战术模板
- 展示模板由特定的格式化控制符组成
- strftime()方法
函数 | 描述 |
---|---|
strftime(tpl,ts) | tpl是格式模板字符串,用来定义输出效果ts是计算机内部时间类型变量 |
strptime(str,tpl) | str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输入效果 |
例如:
>>>t = time.gmtime()
>>>time.strftime("%Y-%m-%d %H:%M:%S",t)
'2018-01-26 12:55:20'
>>>timeStr='2018-01-26 12:55:20'
>>>time.strptime(timeStr,"%Y-%m-%d %H:%M:%S")
格式化字符串 | 日期/时间说明 | 值范围和实例 |
---|---|---|
%Y | 年份 | 0000~9999,例:1900 |
%m | 月份 | 01~12 |
%B | 月份名称 | January~December,例:April |
%b | 月份名称缩写 | Jan~Dec,例:Apr |
%d | 日期 | 01~31,例:25 |
%A | 星期 | Monday~Sunday,例:Wednesday |
%a | 星期缩写 | Mon~Sun,例:Wed |
%H | 小时(24h制) | 00~23,例:12 |
%h | 小时(12h制) | 01~12,例:7 |
%P | 上/下午 | AM,PM,例:PM |
%M | 分钟 | 00~59,例:26 |
%S | 秒 | 00~59,例:26 |
程序计时应用:程序计时指测量起止动作所经历时间的过程
- 测量时间:perf_counter()
- 产生时间:sleep()
函数 | 描述 |
---|---|
perf_counter() | 返回一个CPU级别的精确时间计数值,单位为秒。由于这个技术起点不确定,连续调用差值才有意义 |
sleep(s) | s拟休眠时间,单位是秒,可以使浮点数 |
datetime库
datetime库可以从系统中获得时间,并以用户选择的格式输出。
-
datetime库以格林威治时间为基础,每天由3600*24秒精准定义
-
该库包括两个常量:
datetime.MINYEAR
与datetime.MAXYEAR
,分别表示datetime所能表示的最小、最大年份,值分别为1与9999 -
datetime库以类的方式提供多种日期和时间表达方式:
datetime.date:日期表示类,可以表示年、月、日等
datetime.time:时间表示类,可以表示小时、分钟、秒、毫秒等
datetime.datetime:日期和时间表示的类,功能覆盖date和time
datetime.timedelta:时间间隔有关的类
datetime.tzinfo:与时区有关的信息表示类
由于datetime.datetime类表达形式最为丰富,所以主要介绍这个类的使用。使用datetime类需要用import保留字,具体引用datetime类的方式如下:
from datetime import datetime
datetime.datetime类的使用方式是首先创建一个datetime对象,然后通过对象的方法和属性显示时间。创建datetime对象共有三种方法:
方法 | 描述 |
---|---|
datetime.now() | 返回一个datetime类型,表示当前的日期和时间,精确到微秒,无参数 |
datetime.utcnow() | 返回一个datetime类型,表示当前日期和时间的UTC表示,精确到微秒,无参数 |
datetime.datetime() | 直接使用datetime()构造一个日期和时间对象,返回一个datetime类型,表示指定的日期和时间,可以精确到微秒,有参数 |
datetime()的参数如下
参数 | 描述 |
---|---|
year | 指定的年份,MINYEAR <= year <= MAXYEAR |
month | 指定的月份,1 <= month <= 12 |
day | 指定的日期,1 <= day <= 月份所对应的日起上限 |
hour | 指定的小时,0 <= hour < 24 |
minute | 指定的分数,0 <= minute < 60 |
second | 指定的秒数,0 <= second < 60 |
microsecond | 指定的微秒数,0 <= microsecond < 1000000 |
举个例子:
属性 | 描述 | 属性 |
---|---|---|
someday.min | 固定返回datetime的最小时间对象,datetime(1,1,1,0,0) | someday.min |
someday.max | 固定返回datetime的最大时间对象,datetime(9999,12,31,23,59,59,999999) | someday.max |
someday.year | 返回someday包含的年份 | someday.year |
someday.month | 返回someday包含的月份 | someday.month |
someday.day | 返回someday包含的日期 | someday.day |
someday.hour | 返回someday包含的小时 | someday.hour |
someday.minute | 返回someday包含的分钟 | someday.minute |
someday.second | 返回someday包含的秒钟 | someday.second |
someday.microsecond | 返回someday包含的微秒值 | someday.microsecond |
datetime对象有3个常用的时间格式化方法
属性 | 描述 | 属性 |
---|---|---|
someday.isoformat() | 采用 ISO 8601标准显示时间 | someday.isoformat() |
someday.isoweekday() | 根据日期计算星期后返回1-7,对应星期一到星期日 | someday.isoweekday() |
someday.strftime(format) | 根据格式化字符串format进行格式显示的方法 | someday.strftime(format) |
srtftime()方法是时间格式化最有效的方法,几乎可以以任何通用格式输出时间。该方法利用一个格式化字符串,示例如下:
calendar
允许输出类似Unix cal程序的日历,并提供与日历相关的其他有用功能。默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天。不过我们可以使用setfirstweekday()
方法来设置一周的第一天为星期日或者其他工作日,指定的日期以整数形式给出
方法 | 描述 |
---|---|
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) | 打印一年的日历,theyear指定年份,themonth指定月份,w为每个单元格宽度,默认为0,内部已做处理,最小宽度为2,l为每换列l行,默认为0,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列 |
calendar(year, w=2, l=1, c=6, m=3) | 以多行字符串形式返回一年的日历,w为每个单元格宽度,默认为0,内部已做处理,最小宽度为2,l为每换列l行,默认为0,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列 |
下面为以上用法举例:
random
random库是使用随机数的Python标准库,主要用于生成随机数
用法:import random
random库包括两类函数:
- 基本随机数函数:seed(), random()
- 扩展随机数函数:randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()
random库的使用:
函数 | 描述 |
---|---|
seed(a=None) | 初始化给定的随机数种子,默认为当前的系统时间 |
random() | 生成一个[0.0,1.0)之间的随机小数 |
只要给定的种子相同,则产生的随机数也是相同的,对于使用随机数的程序的,可以复现,再现程序运行的过程
函数 | 描述 |
---|---|
randint(a,b) | 生成一个[a,b]之间的整数 |
randrange(m,n[ ,k]) | 生成一个[m,n)之间以k为步长的随机整数 |
getrandbits(k) | 生成一个k比特长的随机整数 |
uniform(a,b) | 生成一个[a,b]之间的随机整数 |
choice(seq) | 从序列seq中随机选择一个元素 |
shuffle(seq) | 将序列seq中元素随机排列返回打乱后的序列 |