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

四、总结

python time 不支持毫秒 python的timestamp_时间戳


python time 不支持毫秒 python的timestamp_python time 不支持毫秒_02