日期和时间总是充斥着我们的世界,不经意间我们总是会发出“咦,现在几点了,今天星期几呀,今天多少号呀~”的疑问,对于这个无处不在的东西,我们强大的Python当然不会遗漏,建立了一些库来处理它。下面,我们就来了解一下这些库的使用方法。
一、 time库的使用
1、 time库基本介绍
- 是计算机时间的表述
- 提供系统级精确计时功能,用于程序性能分析
- 提供获取系统时间并格式化输出功能
2 、time库函数介绍
- time库包括三类函数
- 时间获取:
time()
、ctime()
、gmtime()
- 时间格式化:
strftime()
、strptime()
- 程序计时:
sleep()
、perf_counter()
- 时间获取:
2.1 时间获取
函数(使用方法:time.<函数名>()) | 描述 | 程序说明 |
---|---|---|
time() | 获取当前时间戳,即计算机内部时间值(为浮点数) | >>>time.time()#获取1970年以来的秒数 返回1555250997.6077707 |
ctime() | 获取当前时间并以易读方式表示,返回字符串 | >>> time.ctime() 返回’Sun Apr 14 22:17:57 2019’ |
gmtime() | 获取当前时间,表示为计算机可以处理的时间格式 | >>> time.gmtime() 返回time.struct_time(tm_year=2019, tm_mon=4, tm_mday=14, tm_hour=14, tm_min=25, tm_sec=25, tm_wday=6, tm_yday=104, tm_isdst=0) |
2.2 时间格式化
- 将时间以合理的方式展示出来
- 格式化:时间格式化的函数前缀是str,而str表示的字符串,所以时间的时间的格式化就类似字符串格式化,需要有展示模板
- 展示模板由特定的格式化控制符组成
格式化控制符 | 说明 | 值范围 |
---|---|---|
%Y | 年份 | 0~9999 |
%m | 月份 | 1~12 |
%B | 月份名称 | January~December |
%b | 月份名称缩写 | Jan~Dec |
%d | 日期 | 1~31 |
%A | 星期 | Monday~Sunday |
%a | 星期缩写 | Mon~Sun |
%H | 小时(24小时制) | 0~23 |
%h | 小时(12小时制) | 1~12 |
%p | 上 / 下午 | AM / PM |
%M | 分钟 | 0~59 |
%S | 秒 | 0~59 |
上述格式可以与print()的格式化函数一起使用。要了解print()的格式化可以进入下面这个链接:https://blog.youkuaiyun.com/best_of_times/article/details/88675675
函数 | 描述 |
---|---|
strftime(tpl, ts) | tpl是格式化模板字符串,用来定义输出效果,ts是计算机内部时间类型变量 |
>>> time.strftime("%Y/%m/%d %p %H:%M:%S",t)
'2019/04/14 PM 15:27:09'
函数 | 描述 |
---|---|
strptime(str, tpl) | str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输出效果 |
>>> t = "2019-04-14 23:34:53"
>>> time.strptime(t,"%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=14, tm_hour=23, tm_min=34, tm_sec=53, tm_wday=6, tm_yday=104, tm_isdst=-1)
2.3 程序计时:
—— 计量起止动作所经历时间的过程
函数 | 描述 |
---|---|
perf_counter() | 以包含小数部分的秒数返回一个性能计数器的值,其被定义为测量较短时间段所能使用的最高可用分辨率时钟,它包括系统范围的在睡眠期间流逝的时间 |
sleep(s) | s定义休眠的时间,单位为秒,可以是浮点数,使用这个函数之后程序将会等待s秒后再进行 |
二、datetime库的使用
2.1、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类表达形式最为丰富,所以在这里主要介绍这个类的使用。
from datetime import datetime
2.2、datetime解析
datetime类(datetime.datetime类,以下简称为datetime类)的使用方式是首先创建一个datetime对象,然后通过对象的方法和属性显示时间。
2.2.1 创建datetime对象的方法(3个):
➢datetime.now()
➢datetime.utcnow()
➢datetime.datetime()
函数 | 描述 |
---|---|
datetime.now() | 作用:返回一个datetime类型,表示当前的日期和时间,精确到微秒。参数:无 |
datetime.utcnow() | 作用:返回一个datetime类型,表示当前日期和时间的UTC表示,精确到微秒。参数:无 |
datetime(year, month, day, hour=0,minute=0,second=0, microsecond=0) | 作用:返回一个datetime类型,表示指定的日期和时间,可以精确到微秒。 |
➢microsecond: 指定的微秒数,0 <= microsecond <1000000
通过调用datetime()函数来直接创建一个datetime对象,表示2019年4月15日16:23,36秒9微秒:
>>> some_time = datetime(2019,4,15,16,23,36,9)
>>> some_time
datetime.datetime(2019, 4, 15, 16, 23, 36, 9)
现在,程序就有了一个datetime对象,我们可以进一步可以利用对象的属性显示时间,为了区别datetime库名,采用上面程序中的
some_time代替生成的datetime对象。
2.2.2 对象的属性
属性 | 描述 |
---|---|
some_time.min | 固定返回datetime的最小时间对象,返回datetime.datetime(1, 1, 1, 0, 0) |
some_time.max | 固定返回datetime的最大时间对象,datetime(9999,12,31,23,59,59,999999) |
some_time.year | 返回对象some_time包含的年份 |
some_time.month | 返回对象some_time包含的月份 |
some_time.day | 返回对象some_time包含的日期 |
some_time.hour | 返回对象some_time包含的小时 |
some_time.minute | 返回对象some_time包含的分钟 |
some_time.second | 返回对象some_time包含的秒钟 |
some_time.microsecond | 返回对象some_time包含的微秒值 |
2.2.3 datetime对象常用的时间格式化方法(3个)
方法 | 描述 |
---|---|
some_time.isoformat() | 采用ISO 8601标准显示时间 |
some_time.isoweekday( | 根据日期计算星期后返回1-7,对应星期一到星期日 |
some_time.strftime(format) | 根据格式化字符串format进行格式显示的方法 |
- strftime()方法是时间格式化最有效的方法,几乎可以以任何通用格式输出时间。
>>> some_time.strftime("%Y/%m/%d %H:%M:%S")
'2019/04/15 16:23:36'
三、calendar库
Calendar模块的函数都是日历相关的,有很广泛的方法用来处理年历和月历,例如打印某月的月历:
模块包含了以下内置函数(12个):
函数( <库名>.<函数名>(参数) ) | 描述 |
---|---|
calendar.calendar(year,w=2,l=1,c=6) | 返回一个多行字符串格式的第year年的年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* w+18+2* c。l是每星期行数。 |
calendar.firstweekday( ) | 返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。 |
calendar.setfirstweekday(weekday) | 设置每周的起始日期码。0(星期一)到6(星期日)。 |
calendar.isleap(year) | 判断year是否是闰年,是闰年返回 True,否则为 False。 |
calendar.leapdays(x,y) | 返回在x,y两年之间的闰年总数。 |
calendar.month(year,month,w=2,l=1) | 返回一个多行字符串格式的第year年的第month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。 |
calendar.monthcalendar(year,month) | 返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。 |
calendar.monthrange(year,month) | 返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。 |
calendar.prcal(year,w=2,l=1,c=6) | 打印第year年的年历。相当于 print calendar.calendar(year,w,l,c)。 |
calendar.prmonth(year,month,w=2,l=1) | 打印第year年第month的月历。相当于 print calendar.calendar(year,w,l,c)。 |
calendar.timegm(tupletime) | 和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间戳(1970纪元后经过的浮点秒数)。 |
calendar.weekday(year,month,day) | 返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。 |
>>> import calendar
>>> print(calendar.isleap(2000))
True
>>> print(calendar.isleap(1900))
False
>>> calendar.prmonth(2019,5,2,1)
May 2019
Mo Tu We Th Fr Sa Su
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
部分参考自菜鸟教程:http://www.runoob.com/python/python-date-time.html