使用time模块主要可以实现三种需求:获取时间、格式化时间、获取时间间隔
一、获取时间
首先掌握一个理论基础:计算机记录的时间实际是一个数字,而这个数字的开始是世界标准时间的1970年1月1日00:00:00。
方法 | 说明 |
time.time() | 从世界标准时间到当前的时刻的秒数 |
time.localtime(seconds=None) | 元组形式的本地时间,不指定秒数时默认当前 |
time.gmtime(seconds=None) | 元组形式的世界统一时间,不指定秒数时默认当前 |
time.ctime(seconds=None) | 格式化的本地时间,不指定秒数时默认当前 |
默认输出如下:
print(time.time())
print(time.localtime())
print(time.gmtime())
print(time.ctime())
# 输出:
1665469707.2993562
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=14, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=6, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
Tue Oct 11 14:28:27 2022
注意看第二个和第三个时间刚好差了8小时。
我们把这个秒数传给后面三个函数,输出如下:
print(time.localtime(1665469707.2993562))
print(time.gmtime(1665469707.2993562))
print(time.ctime(1665469707.2993562))
# 输出:
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=14, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=6, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
Tue Oct 11 14:28:27 2022
localtime和gmtime返回的对象都是struct_time类型的,其中元组里最后三个数值的含义为
tm_wday | 一周的第几日 | 0~6(0为周一,依此类推) |
tm_yday | 一年的第几日 | 1~366(366为闰年) |
tm_isdst | 夏令时 | 1:是夏令时 0:非夏令时 -1:不确定 |
二、格式化时间
无论是用秒数表示的时间还是struct_time,都不是我们日常使用的时间格式。如何获得指定样式的时间?如何将时间字符串还原为时间?下面两个方法将实现以上需求。
时间格式符号 | 说明 |
%Y | 四位数的年份,0001-9999 |
%m | 月份,01-12 |
%d | 天,01-31 |
%H | 小时(24),0-23 |
%I | 小时(12),01-12 |
%p | 上下午,AM PM |
%M | 分钟,00-59 |
%S | 秒,00-59 |
%B | 月份, January-December,小写%b为月份简写 |
%A | 周几,Monday-Sunday,小写%a为周几简写 |
1、时间转为指定样式的字符串
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
# 输出:
2022-10-11 14:50:12
当然,样式可以再中国化一点。只是有一点需要注意,格式字符串中包含中文会出现编码错误,需要设置一下类型。
import locale
locale.setlocale(locale.LC_CTYPE, 'Chinese')
print(time.strftime('%Y年%m月%d日 %H时%M分%S秒', time.localtime()))
# 输出
2022年10月11日 15时01分34秒
2、字符串类型的时间转struct_time
要点和上面一样,需要指定解析字符串时的格式字符串
print(time.strptime('2022-10-11 15:07:20', '%Y-%m-%d %H:%M:%S'))
# 输出:
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=15, tm_min=7, tm_sec=20, tm_wday=1, tm_yday=284, tm_isdst=-1)
三、时间间隔
当我们想要知道一段代码执行耗时是多少,可以用以下方式
1、CPU级别的耗时,用于耗时在1秒内的精确计时
start_time = time.perf_counter()
total = 0
for i in range(100):
total += 0
end_time = time.perf_counter()
print("耗时:{}".format(end_time-start_time))
# 输出:
耗时:8.199999999999874e-06
2、普通精度的计时
(这里如果循环还是100的话,耗时是0,时间太短)
start_time = time.time()
total = 0
for i in range(10000000):
total += 0
end_time = time.time()
print("耗时:{}".format(end_time-start_time))
# 输出:
耗时:0.7570455074310303
3、休眠
在网络请求中用的比较多,需要人为地暂停一下程序的执行。保证访问的服务器不会受到暴力请求。
# do_something
time.sleep(0.5)
# go_on