time库是Python提供的处理时间的标准库。time库提供系统级精确计时器的计时功能,可以用来分析程序性能,也可以让程序暂停运行时间。
time库概述
time库的功能主要分为三个方面:时间处理、时间格式化和计时
- 时间处理主要包括四个函数:
- t i m e . t i m e ( ) 、 time.gmtime()、time.localtime() 、time.ctime()。
- 时间格式化主要包括3个函数:
- time.mktime()、 time.strftime()、time.strptime()。
- 计 时 主 要 包 括 3 个 函 数 :
- t i m e . s l e e p ( ) 、 time.monotonic()、time.perf_counter()
代码示例
时间处理
- time.time()获取当前时间戳
- time.gmtime(secs)获取当前时间戳对应的struct_time对象
- time.localtime(secs)获取当前时间戳对应的本地时间的struct_time对象
- time.ctime(secs)获取当前时间戳对应的易读字符串表示,内部会调用time.localtime()函数以输出当地时间。
# 使用time.time()获取当前时间戳
In [14]: time.time()
Out[14]: 1552611968.8586483
# 使用time.gmtime(secs)获取当前时间戳对应的struct_time对象
In [18]: time.gmtime(time.time())
Out[18]: time.struct_time(tm_year=2019, tm_mon=3, tm_mday=15, tm_hour=1, tm_min=6, tm_sec=51, tm_wday=4
, tm_yday=74, tm_isdst=0)
# 使用time.localtime(secs)获取当前时间戳对应的本地时间的struct_time对象
# 注意:结果与gmtime的区别,UTC时间已自动转换为北京时间
In [19]: time.localtime(time.time())
Out[19]: time.struct_time(tm_year=2019, tm_mon=3, tm_mday=15, tm_hour=9, tm_min=8, tm_sec=46, tm_wday=4
, tm_yday=74, tm_isdst=0)
# 使用time.ctime(secs)获取当前时间戳对应的
# 易读字符串表示,内部会调用time.localtime()
# 函数以输出当地时间。
In [20]: time.ctime(time.time())
Out[20]: 'Fri Mar 15 09:10:05 2019'
时间格式化
- 使用time.mktime(t) 将struct_time对象t转换 为时间戳,注意t代表当地时间。struct_time 对象的元素如下

- time.strftime()函数是时间格式化最有效的方法,几 乎可以以任何通用格式输出时间。该方法利用一个 格式字符串,对时间格式进行表达。
strftime()方法的格式化控制符

- strptime()方法与strftime()方法完全相反,用 于提取字符串中时间来生成strut_time对象, 可以很灵活的作为time模块的输入接口
In [22]: t = time.localtime(time.time())
# 调用time.mktime(t)函数
In [23]: time.mktime(t)
Out[23]: 1552612358.0
In [24]: time.ctime(time.mktime(t))
Out[24]: 'Fri Mar 15 09:12:38 2019'
In [25]: lctime = time.localtime()
In [26]: lctime
Out[26]: time.struct_time(tm_year=2019, tm_mon=3, tm_mday=15, tm_hour=9, tm_min=16, tm_sec=57, tm_wday=
4, tm_yday=74, tm_isdst=0)
# 调用time.strftime()函数
In [27]: time.strftime("%Y-%m-%d %H:%M:%S",lctime)
Out[27]: '2019-03-15 09:16:57'
# strptime()的使用
In [28]: timeString = '2018-01-30 1:23:20'
In [30]: time.strptime(timeString,"%Y-%m-%d %H:%M:%S")
Out[30]: time.struct_time(tm_year=2018, tm_mon=1, tm_mday=30, tm_hour=1, tm_min=23, tm_sec=20, tm_wday=
1, tm_yday=30, tm_isdst=-1)
程序计时
- 程序计时是非常常用的功能,尤其是对于运 行时间较长的程序,往往需要先进行小规模 (短时间)的实验,并根据实验结果预估最 终程序的大致运行时间。
- 程序计时主要要包含三个要素:程序开始/结 束时间、程序运行总时间、程序各核心模块 运行时间。
下面以1千万次循环计时为例介绍程序计时的 实现,并进一步理解time模块相关函数的运用。
# -*- coding: utf-8 -*-
import time
def run():
limit = 10**8
while limit > 0:
limit -= 1
def func1():
time.sleep(0.2)
def func2():
time.sleep(0.4)
def main():
# 获取当前时间戳对应的本地时间的struct_time对象
startTime = time.localtime()
# 格式化输出开始时间
print('Start time:',time.strftime('%Y-%m-%d %H:%M:%S',startTime))
''' 调用一次 perf_counter(),从计算机系统里随机选一个时间点A,
计算其距离当前时间点B1有多少秒。当第二次调用该函数时,
默认从第一次调用的时间点A算起,距离当前时间点B2有多少秒。
两个函数取差,即实现从时间点B1到B2的计时功能。
'''
startPerfCounter = time.perf_counter()
func1()
otherLoop1PerfCounter = time.perf_counter()
otherLoop1Perf = otherLoop1PerfCounter - startPerfCounter
run()
coreLoopPerfCounter = time.perf_counter()
coreLoopPerf = coreLoopPerfCounter - otherLoop1PerfCounter
func2()
otherLoop2PerfCounter = time.perf_counter()
otherLoop2Perf = otherLoop2PerfCounter - coreLoopPerfCounter
endPerfCounter = time.perf_counter()
totalPerf = endPerfCounter - startPerfCounter
endTime = time.localtime()
print("func1 use time:{}s".format(otherLoop1Perf))
print("run use time:{}s".format(coreLoopPerf))
print("func2 use time:{}s".format(otherLoop2Perf))
print("Func use times:{}s".format(totalPerf))
print('Func end time:', time.strftime('%Y-%m-%d %H:%M:%S', endTime))
main()
# 运行结果
Start time: 2019-03-15 09:37:45
func1 use time:0.200246884s
run use time:9.649773082s
func2 use time:0.4004062449999992s
Func use times:10.250427669999999s
Func end time: 2019-03-15 09:37:55