第八章 time模块

1. time模块介绍

time 模块提供了各种时间相关的函数,该模块中对于时间表示的格式有如下三种:

  • 时间戳(timestamp):时间戳表示的是从1970 年1 月1 日00:00:00 开始按秒计算的偏移量。

  • 时间元组(struct_time):共有九个元素,分别为:年、月、日、时、分、秒、一周中的第几日、一年中的第几日、夏令时。

  • 格式化时间字符串(format time):已格式化的结构使时间更具可读性,包括自定义格式和固定格式。

2. 时间戳

时间戳(timestamp)表示的是从1970 年1 月1 日00:00:00 开始按秒计算的偏移量,也就是指格林尼治时间1970 年01 月01 日00 时00 分00 秒(即北京时间1970 年01 月01 日08 时00 分00 秒)起至现在的总秒数,它返回的是float 类型。但是在1970 年之前的日期就无法用时间戳来表示,太遥远的日期也无法用时间戳表示,且UNIX 和Windows 只支持到2038 年。

导入time 模块,然后通过time 模块调用time() 方法获取当前时间的时间戳,代码如下:

import time        			# 导入time模块

print(time.time())  		# 获取当前时间的时间戳

3. 时间元组

在Python 中,使用9 个元素组成的元组来处理时间,我们称之为时间元组(struct_time 元组)。时间元组中9 个元素分别为:年、月、日、时、分、秒、一周中的第几日、一年中的第几日、夏令时。struct_time 元组的含义及属性如表1 所示。

在这里插入图片描述
导入time 模块,然后通过time 模块调用localtime() 方法获取当地时间的时间元组,代码如下:

import time            		# 导入time模块

print(time.localtime())  	# 接收时间戳并返回当地时间的时间元组

程序运行结果如下:

time.struct_time(tm_year=2020, tm_mon=3, tm_mday=11, tm_hour=8, tm_min=54, tm_sec=53,tm_wday=2, tm_yday=71, tm_isdst=0)

说明:当前时间为:2020 年,3 月,11 日,8 时,54 分,53 秒,星期三,一年中的第71 天,不是夏令时。

4. 格式化的时间字符串

常用的时间日期格式化符号:
在这里插入图片描述
完整英文星期名称和简写英文星期名称:
在这里插入图片描述
完整英文月份名称和简写英文月份名称:
在这里插入图片描述
导入time 模块,然后调用time 模块的strftime() 方法按“年- 月- 日 时: 分: 秒”格式输出日期时间,代码如下:

import time                             		# 导入time模块

print(time.strftime(%Y-%m-%d %H:%M:%S’))   	# 打印年-月-日 时:分:秒

5. altzone常量——获取夏令时时区的偏移量(秒为单位)

altzone 常量用于获取本地夏令时的偏移秒数,如果该地区在UTC 东部会返回负值(如西欧,包括英国),且对夏令时启用的地区才可以使用。语法格式如下:

time.altzone

参数说明:

  • 返回值:返回本地夏令时的偏移秒数。

调用altzone 常量获取本地夏令时的偏移秒数,代码如下:

import time        	# 导入time模块

print(‘本地夏令时的偏移秒数为:',time.altzone)

6. daylight常量——获取是否定义了夏令时

daylight 常量用于获取是否定义了夏令时时区。语法格式如下:

time.daylight

参数说明:

  • 返回值:如果定义了夏令时的时区将返回1;否则返回0。

调用daylight 常量获取当前系统时区是否定义了夏令时,代码如下:

import time        	# 导入time模块

print(‘确认定义夏令时时区的返回值为:,time.daylight)

7. timezone常量——获取非夏令时时区的偏移量(秒为单位)

timezone 常量用于获取本地非夏令时的偏移秒数(西欧大部分地区与亚洲为负,美国为正,英国为零),且对非夏令时的地区才可以使用。语法格式如下:

time.timezone

参数说明:

  • 返回值:返回非夏令时时区的偏移秒数。

调用timezone 常量获取北京非夏令时时区的偏移量,代码如下:

import time    	# 导入time模块

print(‘北京非夏令时时区的偏移量为:',time.timezone,’秒')

8. tzname常量——返回标准时区名称与夏令时时区名称所组成的元组

tzname 常量用于获取包含两个字符串的元组,该元组中的第一个值为本地非夏令时时区名称,第二个值为本地夏令时时区名称。语法格式如下:

time.tzname

参数说明:

  • 返回值:返回标准时区名称与夏令时时区名称所组成的元组。

使用tzname 常量,由于返回的元组信息为乱码,所以需要进行编码后输出,代码如下:

import time           		# 导入time模块

tz=time.tzname         		# 获取计算机当前标准时区与夏令时时区名称

print(‘返回的元组信息为:',tz)


# 由于返回的元组信息为乱码,所以需要进行编码后输出

print(‘标准时区名称为:',tz[0].encode(‘latin-1).decode(‘gbk’))

print(‘夏令时时区名称为:',tz[1].encode(‘latin-1).decode(‘gbk’))

9. asctime()方法——接收时间元组并返回一个字符串

asctime() 方法用于接收时间元组,并返回一个可读长度为24 个字符的字符串,语法格式如下:

time.asctime([t]))

参数说明:

  • t :表示完整的9 位元素元组或者通过方法localtime() 方法或gmtime() 方法返回的时间值。参数为空时,默认以time.localtime() 的值为参数,所得到的是当前时间。

  • 返回值:返回一个字符串,格式为:Www Mmm dd hh:mm:ss yyyy。其中Www为星期、Mmm为月份、dd 为日、hh 为时、mm 为分、ss 为秒、yyyy 为年份。

使用asctime() 方法输出时间元组对应的时间字符串,代码如下:

import time                                       				# 导入time模块

t = (2018,12,13,21,36,54,3,347,0)                    			# 创建一个名称为t的时间元组

print(‘指定时间元组: ‘,time.asctime(t))               			# 指定时间元组

print(‘默认时间元组: ‘,time.asctime())                			# 参数为空

print(‘UTC时区的时间元组:',time.asctime(time.gmtime())) 		# 设置参数为time.gmtime()

10. clock()方法——以浮点数返回当前的CPU时间

clock() 方法用于获取浮点类型的当前CPU 时间,可以用来衡量不同程序的运行时间。语法格式如下:

time.clock()

参数说明:

  • 返回值:第一次调用该方法,返回的时间为本次程序开始执行到调用clock() 方法结束所经过的秒数;第二次调用该方法,返回的时间为本次程序开始执行到第二次调用结束所经过的秒数,其类型为浮点型。

说明:time.clock() 方法在Python 3.3 中已被弃用,将从Python 3.8 中删除,但可以使用time.perf_counter()方法或time.process_time() 方法来代替。

time() 方法与clock() 方法都可以返回一个时间信息,不同的是,time() 方法返回格林尼治时间1970 年01 月01 日00 时00 分00 秒(北京时间1970 年01 月01 日08 时00 分00 秒)起至现在的总秒数;而clock() 方法返回自程序执行开始到clock() 方法结束所经过的秒数,代码如下:

import time        # 导入time模块

print(‘time方法的执行结果为:',time.time())

print(‘clock方法的执行结果为:',time.clock())

程序运行结果如下:

time方法的执行结果为:1564470063.4872446

clock方法的执行结果为:0.0679539

说明:由于time.clock() 方法已被弃用,所以在运行结果中会出现如下警告信息:

C:/Users/Administrator/Desktop/test1/t.py:13: DeprecationWarning: time.clock has beendeprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead

print(‘clock方法的执行结果为:',time.clock())

11. ctime()方法——接收时间戳并返回一个字符串

ctime() 方法用于以时间戳为参数,返回一个字符串。语法格式如下:

time.ctime([secs])

参数说明:

  • secs:要转换为字符串时间的秒数。如果没有参数或参数为None,将默认以time.time() 方法的时间戳作为参数,此时,ctime() 方法的的作用相当于asctime(localtime(secs)) 方法。

  • 返回值:返回一个字符串。

分别使用ctime() 方法和asctime() 方法输出本地时间戳对应的时间字符串,代码如下:

import time           	# 导入time模块

print(time.ctime())    	# 使用ctime()方法输出表示本地时间的字符串

print(time.asctime())   # 使用asctime()方法输出表示本地时间的字符串

程序运行结果如下:

Wed Mar 11 09:03:15 2020

Wed Mar 11 09:03:15 2020

使用ctime() 方法以指定的时间戳为参数返回对应的时间字符串,代码如下:

import time                         		# 导入time模块

print(time.ctime(1589383417.9643884 )) 		# 打印指定时间戳对应的字符串

12. get_clock_info()方法——获取指定时钟以命名空间对象形式的信息

get_clock_info() 方法用于获取指定时钟以命名空间对象形式的信息。语法格式如下:

time.get_clock_info(name)

参数说明:

  • name:该参数为需要获取的指定时钟方法的名称,其类型为字符类型。如获取time() 方法对应的命名空间对象信息时,只需填写字符型名称‘time’ 即可。

  • 返回值:返回指定时钟以命名空间对象形式的信息。

使用get_clock_info() 方法获取time() 方法的时钟信息,代码如下:

import time 									# 导入time模块

time_namespace = time.get_clock_info(‘time’) 	# 获取time()方法的时钟信息

print(time_namespace)

程序运行结果如下:

namespace(adjustable=True, implementation='GetSystemTimeAsFileTime()', monotonic=False,

resolution=0.015625)

说明:在返回的时钟信息中具有以下四个特性:
adjustable :如果时钟可以自动更改(例如通过NTP 守护程序)或由系统管理员手动更改,则为True ;否则为False。
implementation :用于获取时钟值的底层C函数的名称。关于可能的值,请参考时钟ID 常量。
monotonic :如果时钟不能倒退,则为True ;否则为False。
resolution :以秒为单位的时钟分辨率(float)。

将常见的时钟方法名称添加至列表中,然后通过for 循环获取每个时钟方法对应的信息,代码如下:

import time                                       		# 导入time模块

# 常见时钟方法名称

time_list = [‘time’,’thread_time’,’process_time’,’perf_counter’,’monotonic’]

for i in time_list:                                		# 循环遍历每个时钟方法对应的名称

print(i,’方法的时钟信息为:\n’,time.get_clock_info(i))   	# 打印每个时钟方法的信息

13. gmtime()方法——接收时间戳并返回UTC时区的时间元组

gmtime() 方法用于将一个时间戳转换为UTC 时区(0 时区)的时间元组,返回time.struct_time类型的对象。语法格式如下:

time.gmtime([secs])

参数说明:

  • secs:转换为time.struct_time类型的对象的秒数,其默认值为time.time()。

  • 返回值:返回指定时间戳所对应UTC时区的时间元组。

首先使用localtime() 方法输出本地时间的时间元组,然后使用gmtime() 方法输出UTC 时区的时间元组,对比两种时间元组的不同,代码如下:

import time 		# 导入time模块

print(‘本地时间的时间元组为:', time.localtime())

print(‘UTC时区的时间元组为: ‘, time.gmtime())

程序运行结果如下:

本地时间的时间元组为: time.struct_time(tm_year=2020, tm_mon=3, tm_mday=11, tm_hour=9, tm_min=8, tm_sec=4, tm_wday=2, tm_yday=71, tm_isdst=0)

UTC时区的时间元组为: time.struct_time(tm_year=2020, tm_mon=3, tm_mday=11, tm_hour=1,tm_min=8, tm_sec=4, tm_wday=2, tm_yday=71, tm_isdst=0)

说明:UTC(Coordinated Universal Time)是世界协调时间(又称世界标准时间、世界统一时间),世界协调时间以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。gmtime() 方法和localtime() 方法类似,都能返回时间元组。localtime() 方法返回的是当前时区的时间元组,而gmtime() 方法返回的是UTC 时区(0 时区)的时间元组。与UTC 时间对应的就是各个时区的本地时间,东N区的时间比UTC时间早N个小时,因此,UTC时间+ N 小时即为东N区的本地时间;而西N 区时间比UTC 时间晚N 个小时,因此,UTC 时间- N 小时即为西N 区的本地时间。中国在东8 区,因此比UTC 时间早8 小时,可以以UTC+8 表示。

14. localtime()方法——接收时间戳并返回本地时间的时间元组

localtime() 方法用于将时间戳转换为本地时间的时间元组。语法格式如下:

time.localtime([secs])

参数说明:

  • secs:转换为time.struct_time类型的对象的秒数。如果secs参数未提供或为None,则返回当前时间(即默认调用time.time())。

  • 返回值:返回指定时间戳对应的本地时间的时间元组。

使用localtime() 方法获取本地当前时间的时间元组,代码如下:

import time 								# 导入time模块

print(time.localtime()) 					# 打印本地当前时间的时间元组

print(time.localtime(time.time()))			# 以time.time()返回的时间戳为参数获取本地时间的时间元组

程序运行结果如下:

time.struct_time(tm_year=2020, tm_mon=3, tm_mday=11, tm_hour=9, tm_min=9, tm_sec=7, tm_wday=2, tm_yday=71, tm_isdst=0)

time.struct_time(tm_year=2020, tm_mon=3, tm_mday=11, tm_hour=9, tm_min=9, tm_sec=7, tm_wday=2, tm_yday=71, tm_isdst=0)

使用localtime() 方法将给定的时间戳转换为时间元组,代码如下:

import time                            			# 导入time模块

print(time.localtime(1584773763.789422))  		# 将给定的时间戳转换为当地时间的时间元组

程序运行结果如下:

time.struct_time(tm_year=2020, tm_mon=3, tm_mday=21, tm_hour=14, tm_min=56, tm_sec=3,tm_wday=5, tm_yday=81, tm_isdst=0)

在获取时间元组的属性时,可以通过“. 属性名”的方式来获取对应的值,也可以通过下标索引来获取对应的属性值,代码如下:

import time                             			# 导入time模块

t = time.localtime()                     			# localtime()方法获取本地当前时间的时间元组

print(‘本地当前时间的时间元组为:',t)        			# 打印本地当前时间的时间元组

print(‘属性名获取的年份为:',t.tm_year, “年")  		# 通过“.属性名”的方式获取年份

print(‘下标索引获取的月份为:',t[1], “月")     		# 通过下标索引获取月份

15. mktime()方法——接收时间元组并返回时间戳

mktime() 方法用于以时间元组作为参数并返回时间戳。语法格式如下:

time.mktime(t)

参数说明:

  • t:结构化的时间或者完整的9 位元素元组。

  • 返回值:返回用秒数来表示时间的浮点数。

使用mktime() 方法获取指定的时间元组为参数返回的时间戳,代码如下:

import time                      	# 导入time模块

t=(2018,12,13,21,36,54,3,347,0)    	# 创建一个名称为t的时间元组

print(time.mktime(t))            	# 以时间元组作为参数并返回时间戳

程序运行结果如下:

1544708214.0

说明:如果传入的值不是一个合法的时间元组,将触发OverflowError 或ValueError 错误异常。

首先使用localtime() 方法获取本地当前时间的时间元组,然后将获取的时间元组作为mktime()方法的参数并输出返回的时间戳,代码如下:

import time                         		# 导入time模块

t=time.localtime()                   		# 获取本地当前时间的时间元组

print(‘本地当前时间的时间元组为:',t)     	# 输出本地当前时间的时间元组

print(‘返回的时间戳为:',time.mktime(t))  	# 以本地当前时间的时间元组为参数返回时间戳

16. monotonic()方法——获取单调时钟的值

monotonic() 方法用于获取一个单调时钟的值(以浮点类型的秒为单位)。该值为不能倒退的时钟值,并且该值不会受到系统时钟更新后的影响。语法格式如下:

time.monotonic()

参数说明:

  • 返回值:返回一个单调时钟的值。

由于单调时钟的值不能倒退,所以计算两次调用之间的差值即可获取代码的休眠时间,代码如下:

import time                      	# 导入time模块

start_time = time.monotonic()      	# 第一次调用

time.sleep(2)                    	# 休眠2秒

end_time = time.monotonic()        	# 第二次调用

print(‘第一次返回的单调时钟值为:',start_time)

print(‘第二次返回的单调时钟值为:',end_time)

print(‘计算的休眠时间为:',end_time-start_time)

17. monotonic_ns()方法——获取单调时钟的(纳秒)值

monotonic_ns() 方法用于获取一个单调时钟的值(以浮点类型的纳秒为单位)。该值为不能倒退的时钟值,并且该值不会受到系统时钟更新的影响。语法格式如下:

time.monotonic_ns()

参数说明:

  • 返回值:返回一个单调时钟的(纳秒)值。

通过计算两次调用之间的差值来获取代码休眠的纳秒时间,代码如下:

import time                      		# 导入time模块

start_time = time.monotonic_ns()   		# 第一次调用

time.sleep(2)                    		# 休眠2秒

end_time = time.monotonic_ns()     		# 第二次调用

print(‘第一次返回的单调时钟纳秒值为:',start_time)

print(‘第二次返回的单调时钟纳秒值为:',end_time)

print(‘计算休眠时间的纳秒为:',end_time-start_time)

18. perf_counter()方法——获取性能计数器的(秒)值

perf_counter() 方法用于获取一个性能计数器的(秒)值,包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以只有连续调用的结果之间的差才是有效的。语法格式如下:

time.perf_counter()

参数说明:

  • 返回值:返回一个性能计数器的(秒)值。

调用循环函数,通过perf_counter() 方法获取循环函数的运行时间(秒)值,代码如下:

import time                                              			# 导入time模块

def procedure():                                          			# 定义函数

a = 0                                                   			# 定义变量

for i in range(1000000):                                  			# 循环

a+=i                                                				# 循环增加变量

print(a)                                             				# 打印当前变量值

start_time = time.perf_counter()                            		# 第一次调用perf_counter()方法

procedure()                                              			# 调用循环增加变量的函数

print(‘函数的运行时间为:',time.perf_counter()-start_time,’秒')   	# 打印函数运行的时间

19. perf_counter_ns()方法——获取性能计数器的(纳秒)值

perf_counter_ns() 方法用于获取一个性能计数器的(纳秒)值,包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以只有连续调用的结果之间的差才是有效的。语法格式如下:

time.perf_counter_ns()

参数说明:

  • 返回值:返回一个性能计数器的(纳秒)值。

调用循环函数,通过perf_counter_ns() 方法获取循环函数运行时间的(纳秒)值,代码如下:

import time                                                  			# 导入time模块

def procedure():                                             			# 定义函数

a = 0                                                      				# 定义变量

for i in range(1000000):                                     			# 循环

a+=i                                                    				# 循环增加变量

print(a)                                                				# 打印当前变量值

start_time = time.perf_counter_ns()                            			# 第一次调用perf_counter_ns()方法

procedure()                                                  			# 调用循环增加变量的函数

print(‘函数的运行时间为:',time.perf_counter_ns()-start_time,’纳秒')  	# 打印函数运行的时间

20. sleep()方法——按指定的秒数使程序休眠若干时间

sleep() 方法的作用是休眠,使程序按指定的秒数休眠若干时间。语法格式如下:

time.sleep(secs)

参数说明:

  • secs:休眠执行的秒数。secs 以秒为单位,如果想定时毫秒,可以使用小数,以便指示更精确地暂停时间。如0.1 秒,则代表暂停100 毫秒。

  • 返回值:无。

使用sleep() 方法实现延迟5 秒,然后通过print() 函数输出文本内容,代码如下:

import time        	# 导入time模块

time.sleep(5)      	# 延迟5秒

print(‘人生苦短,我用Python!')

程序运行结果如下:

人生苦短,我用Python!

使用sleep() 方法与ctime() 方法实现输出休眠前与休眠后的本地时间所对应的字符串,代码如下:

import time           	# 导入time模块

print(time.ctime())    	# 输出表示本地时间的字符串

time.sleep(10)         	# 休眠10秒

print(time.ctime())    	# 休眠10后输出表示本地时间的字符串

21. strftime()方法——把日期格式转为字符串格式

strftime() 方法用于格式化日期,把日期格式转换为字符串格式。该方法可以接收时间元组或者struct_time(如由localtime() 或gmtime() 返回的),按照指定格式转换为字符串格式,格式由参数format 决定。语法格式如下:

time.strftime(format[,t])

参数说明:

  • format :时间字符串所对应的格式,格式符号参考表2。

  • t :可选参数,一个struct_time对象。如果没有提供t,则使用localtime()返回的当前时间。

  • 返回值:返回以可读字符串表示的时间。

使用strftime() 方法输出不同格式的年、月、日,代码如下:

import time                   		# 导入time模块

print(time.strftime(%Y,%m,%d’)) 	# 输出年,月,日

print(time.strftime(%Y/%m/%d’)) 	# 输出年/月/日

print(time.strftime(%Y-%m-%d’)) 	# 输出年-月-日

程序运行结果如下:

2020,03,11

2020/03/11

2020-03-11

使用strftime() 方法格式化输出日期、时间、星期及月份,代码如下:

import time                                			# 导入time模块

print(time.strftime(%Y-%m-%d %H:%M:%S %A %B’)) 	# %A输出英文星期全称,%B输出英文月份全称

print(time.strftime(%Y-%m-%d %H:%M:%S %a %b’)) 	# %a输出英文星期简称,%b输出英文月份简称

程序运行结果如下:

2020-03-11 09:17:09 Wednesday March

2020-03-11 09:17:09 Wed Mar

使用strftime() 方法格式化多种时间对象,代码如下:

import time                   			# 导入time模块

t=(2020,12,13,21,36,54,3,347,0) 		# 创建一个名称为t的时间元组

# 根据提供的时间元组获取年-月-日 时:分:秒

print(time.strftime(%Y-%m-%d %H:%M:%S’,t))

# 根据localtime()返回的时间获取年 月 日 时 分 秒

print(time.strftime(%Y %m %d %H %M %S’,time.localtime()))

# 根据gmtime()返回的时间获取年,月,日 时:分:秒

print(time.strftime(%Y,%m,%d %H:%M:%S’,time.gmtime()))

22. strptime()方法——把时间字符串转为时间元组

strptime() 方法用于根据指定的格式把一个时间字符串转为时间元组,语法格式如下:

time.strptime(string[,format])

参数说明:

  • string:表示时间字符串。

  • format :表示时间字符串所对应的格式,格式符号参考表2。

  • 返回值:返回struct_time对象。

使用strptime() 方法将指定的时间字符串转换为时间元组,代码如下:

import time                                              			# 导入time模块

print(time.strptime(2020-07-29 21:36:54,%Y-%m-%d %H:%M:%S”)) 	# 将时间字符串转为时间元组

23. time()方法——返回当前时间的时间戳

time 模块中的time() 方法用于返回当前时间的时间戳。语法格式如下:

time.time()

参数说明:

  • 返回值:返回当前时间的时间戳。

使用time() 方法获取当前时间戳的显示范围,代码如下:

import time                                    			# 导入time模块

print(‘取整后的时间戳为: ‘,int(time.time()))       		# 对时间戳取整

print(‘小数点后两位的时间戳为:',%.2f’ % time.time())  	# 打印小数点后两位的时间戳

程序运行结果如下:

取整后的时间戳为: 1564127484

小数点后两位的时间戳为: 1564127484.35

首先使用time() 方法获取当前时间戳,由于秒与毫秒之间的换算单位为1000,所以需要用当前的时间戳*1000,才可获取时间戳的毫秒数;再通过int() 与round() 函数对时间戳的毫秒数进行四舍五入并取整,代码如下:

import time                                		# 导入time模块

millis = time.time() * 1000                  	# 获取时间戳毫秒数

millis_int = int(round(time.time() * 1000))    	# 四舍五入并取整

print(‘时间戳的毫秒为:',millis)

print(‘四舍五入取整后:',millis_int)

24. time_ns()方法——返回当前时间的 时间戳(纳秒)

time 模块中的time_ns() 方法与time() 方法类似,用于返回以纳秒为单位的时间戳。语法格式如下:

time.time_ns()

参数说明:

  • 返回值:返回以纳秒为单位的时间戳。

使用time_ns() 方法获取当前时间戳的纳秒值,代码如下:

import time    		# 导入time模块

print(‘当前时间戳的纳秒值为:', time.time_ns())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值