python3 之 time模块
- 一、表示时间的常用方式
- 1、时间戳(timestamp)
- 2、格式化的时间字符串
- 3、元组(struct_time),结构化时间
- 二、time模块常用的内置方法
- 1、time.time()
- 2、time.localtime(secs)
- 3、time.gmtime(secs)
- 4、time.mktime(t)
- 5、time.asctime(t)
- 6、time.ctime(secs)
- 7、strftime(format[, t])
- 8、time.strptime(string[, format])
- 9、time.sleep(secs)
- 10、time.process_time()
- 11、time.perf_counter()
- 三、其它
- 1、对比time.time()、time.process_time() 、time.perf_counter()
- 2、datetime.datetime.now()
- 四、总结
一、表示时间的常用方式
在python中,一般有以下几种方式来表示时间。
1、时间戳(timestamp)
时间戳(timestamp): 通常,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,是属于float类型。
import time
# 返回当前时间的时间戳
time.time()
print(time.time())
print(type(time.time()))
输出结果:
1631415925.5334067
<class 'float'>
2、格式化的时间字符串
举例:
① %Y-%m-%d %X : 2021-09-12 16:22:40
② %Y-%m-%d %H:%M:%S : 2021-09-12 16:22:40
③ %X : 16:22:40
④ %a %b %d %H:%M:%S %Y : Sun Sep 12 16:22:40 2021
⑤ %Y%m%d%H%M%S : 20210912143659
⑥ %Y-%m-%d %H:%M:%S.%f : 2021-09-12 17:22:32.253075
3、元组(struct_time),结构化时间
元组(struct_time) :struct_time元组共有9个元素。 (年,月,日,时,分,秒,一周中的星期几,一年中第几天,夏令时)。
import time
print(time.localtime())
输出结果:
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=12, tm_hour=16, tm_min=3, tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)
# tm_wday:range[0, 6],星期一是 0 。
# tm_isdst:在调用 mktime()时,夏令时生效设置为1,不生效设置为0,未知设置为-1 。
二、time模块常用的内置方法
1、time.time()
返回当前时间的时间戳,是float类型。
time(), 它会把sleep()的时间也算进去。
import time
print(time.time())
print(type(time.time()))
输出的结果:
1631436119.59761
<class 'float'>
2、time.localtime(secs)
将一个时间戳转换为当前时区(东八区)的结构化时间struct_time,是一个元组。
secs参数未提供,则以当前时间为准。
import time
print(time.localtime())
print(type(time.localtime()))
输出的结果:
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=12, tm_hour=16, tm_min=41, tm_sec=59, tm_wday=6, tm_yday=255, tm_isdst=0)
<class 'time.struct_time'>
3、time.gmtime(secs)
和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的 struct_time。
与东八区相差8个小时。
import time
print(time.gmtime())
print(type(time.gmtime()))
输出的结果:
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=12, tm_hour=8, tm_min=41, tm_sec=59, tm_wday=6, tm_yday=255, tm_isdst=0)
<class 'time.struct_time'>
4、time.mktime(t)
mktime(t) : 将一个struct_time转化为时间戳。
如果没有参数,则会将time.localtime()作为参数传入。
import time
print(time.mktime(time.localtime()))
print(type(time.mktime(time.localtime())))
输出的结果:
1631436119.0
<class 'float'>
5、time.asctime(t)
asctime([t]) : 把一个表示时间的元组或者struct_time,表示为这种形式:‘Sun Sep 12 16:41:59 2021’。
如果没有参数,将会将time.localtime()作为参数传入。
import time
print(time.asctime(time.localtime()))
print(type(time.asctime(time.localtime())))
输出的结果:
Sun Sep 12 16:41:59 2021
<class 'str'>
6、time.ctime(secs)
ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。
如果参数未给或者为None的时候,将会默认time.time()为参数。
它的作用相当于time.asctime(time.localtime(secs))。
import time
print(time.ctime())
print((time.ctime()))
输出的结果:
Sun Sep 12 16:41:59 2021
<class 'str'>
7、strftime(format[, t])
把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回),转化为格式化的时间字符串。
如果t未指定,将传入time.localtime()。
如果元组中任何一个元素越界,ValueError的错误将会被抛出。
import time
print(time.strftime("%Y-%m-%d %X", time.localtime(time.time()))) # %X 表示的是 时分秒, 相当于 %H:%M:%S
print(type(time.strftime("%Y-%m-%d %X", time.localtime(time.time()))))
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
print(time.strftime("%X", time.localtime(44152.0146412037)))
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime(time.time()))) # 与 time.asctime() 返回的格式一样
输出的结果:
2021-09-12 16:41:59
<class 'str'>
2021-09-12 16:41:59
20:15:52
Sun Sep 12 16:41:59 2021
8、time.strptime(string[, format])
time.strptime(string[, format]), 把一个格式化时间字符串转化为struct_time。
实际上它和strftime(format[, t]) 是逆操作。
在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y" 。
import time
print(time.strptime('2021-09-12 14:36:59', '%Y-%m-%d %X'))
print(type(time.strptime('2021-09-12 14:36:59', '%Y-%m-%d %X')))
print(time.strptime("20210912143659", "%Y%m%d%H%M%S"))
输出的结果:
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=12, tm_hour=14, tm_min=36, tm_sec=59, tm_wday=6, tm_yday=255, tm_isdst=-1)
<class 'time.struct_time'>
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=12, tm_hour=14, tm_min=36, tm_sec=59, tm_wday=6, tm_yday=255, tm_isdst=-1)
9、time.sleep(secs)
time.sleep(secs) :线程推迟指定的时间(s)运行,单位为秒。
time.sleep(3)
10、time.process_time()
time.process_time(),它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。
process_time()不包括sleep()休眠时间期间经过的时间。
import time
print(time.process_time())
print(type(time.process_time()))
time.sleep(2)
print(time.process_time())
输出的结果:
0.03125
<class 'float'>
0.03125
11、time.perf_counter()
time.perf_counter(),返回性能计数器的值(以小数秒为单位)作为浮点数,即具有最高可用分辨率的时钟,以测量短持续时间。
它会包含sleep()休眠时间,适用测量短持续时间。
import time
time.sleep(2)
print(time.perf_counter())
print(type(time.perf_counter()))
输出的结果:
2.0319464
<class 'float'>
三、其它
1、对比time.time()、time.process_time() 、time.perf_counter()
t0 = time.time()
c0 = time.perf_counter()
p0 = time.process_time()
print('我是time()方法,运行开始t0:', t0)
print('我是perf_counter()方法,运行开始c0:', c0)
print('我是process_time()方法,运行开始p0:', p0)
total = 0
for i in range(10000000):
total += i
time.sleep(2)
print("计算总和为:", total)
t1 = time.time()
c1 = time.perf_counter()
p1 = time.process_time()
print('我是time()方法,运行结束t1:', t1)
print('我是perf_counter()方法,运行结束c1:', c1)
print('我是process_time()方法,运行结束p1:', p1)
take_time1 = t1 - t0
take_time2 = c1 - c0
take_time3 = p1 - p0
print("-----------------------------")
print("time()方法,用时t1-t0:{}s".format(take_time1))
print("perf_counter()方法,用时c1-c0:{}s".format(take_time2))
print("process_time()方法,用时p1-p0:{}s".format(take_time3))
print("测试完毕")
输出的结果:
我是time()方法,运行开始t0: 1631437777.230656
我是perf_counter()方法,运行开始c0: 2.0320149
我是process_time()方法,运行开始p0: 0.03125
计算总和为: 49999995000000
我是time()方法,运行结束t1: 1631437779.8167577
我是perf_counter()方法,运行结束c1: 4.6180442
我是process_time()方法,运行结束p1: 0.609375
-----------------------------
time()方法,用时t1-t0:2.586101770401001s
perf_counter()方法,用时c1-c0:2.5860293s
process_time()方法,用时p1-p0:0.578125s
测试完毕
2、datetime.datetime.now()
datetime.datetime.now():获取系统当前的时间。
import datetime
# 获取系统当前的时间
print(datetime.datetime.now())
print(type(datetime.datetime.now()))
print(str(datetime.datetime.now())[:-7]) #转为为字符串后,切片 取 年月日时分秒
print(datetime.datetime.now().strftime("%Y-%m-%d %X"))
输出的结果:
2021-09-12 17:09:39.816757
<class 'datetime.datetime'>
2021-09-12 17:09:39
2021-09-12 17:09:39
datetime.datetime.now() 返回的类型是 datetime.datetime 对象。所以在用于strptime() 的时候,需先转为字符串。
import datetime
import time
m = datetime.datetime.now()
timeArray = time.strptime(str(m), "%Y-%m-%d %H:%M:%S.%f") # 返回 struct_time
t = time.strftime("%Y%m", timeArray) # 返回格式化字符串
print(t)
输出的结果:
202109
四、总结