在实际应用中,经常需要得到一些时间信息,如得到某个事件发生的时间、某个资源的有效期限及某个时间是否是周末等。
在 Python 中,有一个系统自带的库 time,在该库中提供了对时间、日期进行操作的一些工具函数。
time 库不是自动加载的。如果需要使用它,应先将其引入,代码如下:
import time
在 Python 中使用了两种时间表示法,一种是用距离 1970 年 1 月 1 日 0 时的秒数来表示时间。另外一种是常用的表示方法,用年、月、日、时、分、秒等来表示,后文称为时分秒表示。
如果用秒数来表示,则可以使用time()函数来得到当前时间。
>>> import time
>>> time.time()
1555891997.224464
如果用时分秒来表示时间,可以使用 localtime() 函数来获得当前的本地时间。
>>> import time
>>> time.localtime()
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=22, tm_hour=8,
tm_min=10, tm_sec=31, tm_wday=0, tm_yday=112, tm_isdst=0)
通过上面的例子可以看到,年份是用整数表示的,如 2019;月份也是用整数表示的,取值范围是 1~12,分别表示一月到十二月;日也是用整数表示的,取值范围是1~31,分别对应 1 日到 31 日;时也是用整数表示的,范围是 0~59;分也是用整数表示的,范围是 0~59;秒也是用整数表示的,范围是 0~59。
另外,字段 tm_wday 表示星期几,取值范围是 0~6,0 表示星期一,6 表示星期日。字段 tm_yday 表示这个时间在当年是第多少天,取值范围是 1~366,1 表示是当年的第一天;tm_isdst 表示夏令时,可以取值 -1、0 或者 1。
这两种表示方法是可以相互转换的。如从秒数表示的时间转换到用时分秒表示的时间,可以使用 gmtime()函数。
>>> t = 0 # 时间为0,表示1970年1月1日0时
>>> time.gmtime(t) # 转换成年月日的样式
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0,
tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
如果要从时分秒表示的时间转换成秒数表示的时间,可以使用 mktime() 函数。
>>> t = 100 # 秒数表示的时间
>>> dmt = time.gmtime(t) # 转换成时分秒的格式
>>> dmt # 显示
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0,
tm_min=1, tm_sec=40, tm_wday=3, tm_yday=1, tm_isdst=0)
>>> st = time.mktime(dmt) # 将时分秒转换成秒数
>>> st # 注意是当地时间,我们的时区是+8
-28700.0
>>> st+8*60*60 # 调整时区,得到秒数
100.0
接下在介绍一些和时间相关的接口函数,包括获得目前时间、得到不同格式的时间字符串等。
time() 函数返回当前时间距离 1970 年 1 月 1 日 0 时的时间,单位为秒,返回值类型是浮点数。
import time
>>> time.time() # 得到当前时间
1555891351.948157
sleep() 函数让当前程序休眠指定的秒数,其参数可以是浮点数。
>>> import time # 引入时间库
>>> t1 = time.time() # 得到当前时间t1
>>> time.sleep(3) # 休眠3秒钟
>>> t2 = time.time() # 得到新的当前时间t2
>>> print(t2-t1) # t2和t1的时间差,大致就是休眠的时间
3.00099992752 # 的确休眠了3秒
>>> t1 = time.time() # 第二个实验,得到新的当前时间t1
>>> time.sleep(3.2) # 休眠3.2秒,注意是实数,不是整数
>>> t2 = time.time() # 得到新的当前时间t2
>>> print(t2-t1) # 查看二者时间差是否为3.2秒
3.20399999619 # 时间差为3.2秒
gmtime() 函数返回一个类 time.struct_time 的实例对象,该对象包含 tm_year、tm_hour 等属性,分别用来表示年、小时等信息。
>>> a = time.time()
>>> a
1559053302.312
>>> b = time.gmtime(a)
>>> b
time.struct_time(tm_year=2019, tm_mon=5,
tm_mday=28, tm_hour=14, tm_min=21,
tm_sec=42, tm_wday=1, tm_yday=148,
tm_isdst=0)
>>> type(b)
<type 'time.struct_time'>
>>> b.tm_year
2019
>>> b.tm_mon
5
localtime() 函数得到时分秒表示的当前时间,并且是用类 time.struct_time 的实例对象来表示的。该实例对象包含 tm_year 等属性,用来表示年份等信息。
>>> a = time.localtime()
>>> type(a)
<type 'time.struct_time'>
>>> a
time.struct_time(tm_year=2019, tm_mon=5,
tm_mday=28, tm_hour=22, tm_min=25,
tm_sec=28, tm_wday=1, tm_yday=148,
tm_isdst=0)
>>> a.tm_year
2019
>>> a.tm_mday
28