【Python】Time 模块
2022年 05月 12 日

子弹

time 模块

在Python中,通常有这几种方式来表示时间:

  • 时间戳
  • 格式化的时间字符串
  • 元组(struct_time)共九个元素。

由于 Python 的 time 模块实现主要调用 C 库,所以各个平台可能有所不同。

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行 type(time.time()),返回的是 float 类型。

元组(struct_time)方式:struct_time 元组共有9个元素,返回 struct_time 的函数主要有 gmtime()localtime()strptime()。下面列出这种方式元组中的几个元素:

索引(Index)属性(Attribute)值(Values)
0tm_year(年)比如2011
1tm_mon(月)1 - 12
2tm_mday(日)1 - 31
3tm_hour(时)0 - 23
4tm_min(分)0 - 59
5tm_sec(秒)0 - 61
6tm_wday(weekday)0 - 6(0表示周日)
7tm_yday(一年中的第几天)1 - 366
8tm_isdst(是否是夏令时)默认为-1

time 模块内置函数

time 模块包含了以下内置函数,既有时间处理的,也有转换时间格式的:

time.asctime(tupletime: time.struct_time)

接受时间元组 time.struct_time 并返回一个可读的形式为 "Thu May 12 11:42:45 2022" 的24个字符的字符串。

time.ctime(secs: float)

接受时时间戳 timestamp 并返回一个可读的形式为 "Thu May 12 11:42:45 2022" 的24个字符的字符串。

time.gmtime(secs: float)

接受时时间戳 timestamp 并返回格林威治天文时间下的时间元组 time.struct_time

time.localtime(secs: float)

接受时时间戳 timestamp 并返回当地时间下的时间元组 time.struct_time

time.mktime(tupletime: time.struct_time)

接受时间元组 time.struct_time 并返回时间戳 timestamp

time.sleep(secs: float|int)

推迟调用线程的运行,secs 指秒数。

time.strftime(fmt: str, tupletime: time.struct_time)

接收以时间元组,并返回以可读字符串表示的当地时间,格式由 fmt 决定。
其中 fmt 格式:

  • %Y 年份
  • %m 月份(十进制) [01,12]
  • %d 月份中的某一天 [01,31]
  • %H 小时(24 小时制)[00,23]
  • %M 分钟 [00,59]
  • %S 秒 [00,61]
  • %z 时区与 UTC 的偏移量
  • %a 星期缩写
  • %A 星期全称
  • %b 月份缩写
  • %B 月份全称
  • %c 适当日期和时间表示
  • %I 小时(12 小时制) [01,12]
  • %p AM or PM

time.strptime(str, fmt='%a %b %d %H:%M:%S %Y')

根据 fmt 的格式把一个时间字符串解析为时间元组。

time.time( )

返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

time.perf_counter()

返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。

time 模块 重要属性

time.timezone

属性 time.timezone 是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲<=0大部分欧洲,亚洲,非洲)。

time.tzname

属性 time.tzname 包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。

三种时间转换关系图

79

GMT时间元组和当地时间元组的区别

执行下面代码会发现,输出的元组除了小时其他都一样。差了8小时,因为北京时间是东八区。

import time

t = time.time()
a = time.gmtime(t)
b = time.localtime(t)

print(a)
print(b)

输出:

time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=8, tm_min=56, tm_sec=14, tm_wday=3, tm_yday=132, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=16, tm_min=56, tm_sec=14, tm_wday=3, tm_yday=132, tm_isdst=0)

但将这两个时间元组转换回时间戳会发现时间时间戳是一样的,当然这是肯定的,但是如何做到的呢?

import time

t = time.time()
a = time.gmtime(t)
b = time.localtime(t)
c = time.mktime(a)
d = time.mktime(b)
print(a)
print(b)
print(c)
print(d)

输出:

time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=9, tm_min=4, tm_sec=31, tm_wday=3, tm_yday=132, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=17, tm_min=4, tm_sec=31, tm_wday=3, tm_yday=132, tm_isdst=0)
1652317471.0
1652346271.0

因为时间元组中有个属性 tm_gmtoff 存放者与 GMT 时间偏移的信息量。

import time

t = time.time()
a = time.gmtime(t)
b = time.localtime(t)
c = time.mktime(a)
d = time.mktime(b)
print(a)
print(b)
print(c)
print(d)
print(a.tm_gmtoff)
print(b.tm_gmtoff)

输出:

time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=9, tm_min=7, tm_sec=45, tm_wday=3, tm_yday=132, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=17, tm_min=7, tm_sec=45, tm_wday=3, tm_yday=132, tm_isdst=0)
1652317665.0
1652346465.0
0
28800

Local 时间与 GMT 时间偏移了28800秒,正好是8小时。而偏移的秒数存放在 time.timezone 这个属性中。

【Python】Time 模块

time 模块

在Python中,通常有这几种方式来表示时间:

  • 时间戳
  • 格式化的时间字符串
  • 元组(struct_time)共九个元素。

由于 Python 的 time 模块实现主要调用 C 库,所以各个平台可能有所不同。

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行 type(time.time()),返回的是 float 类型。

元组(struct_time)方式:struct_time 元组共有9个元素,返回 struct_time 的函数主要有 gmtime()localtime()strptime()。下面列出这种方式元组中的几个元素:

索引(Index)属性(Attribute)值(Values)
0tm_year(年)比如2011
1tm_mon(月)1 - 12
2tm_mday(日)1 - 31
3tm_hour(时)0 - 23
4tm_min(分)0 - 59
5tm_sec(秒)0 - 61
6tm_wday(weekday)0 - 6(0表示周日)
7tm_yday(一年中的第几天)1 - 366
8tm_isdst(是否是夏令时)默认为-1

time 模块内置函数

time 模块包含了以下内置函数,既有时间处理的,也有转换时间格式的:

time.asctime(tupletime: time.struct_time)

接受时间元组 time.struct_time 并返回一个可读的形式为 "Thu May 12 11:42:45 2022" 的24个字符的字符串。

time.ctime(secs: float)

接受时时间戳 timestamp 并返回一个可读的形式为 "Thu May 12 11:42:45 2022" 的24个字符的字符串。

time.gmtime(secs: float)

接受时时间戳 timestamp 并返回格林威治天文时间下的时间元组 time.struct_time

time.localtime(secs: float)

接受时时间戳 timestamp 并返回当地时间下的时间元组 time.struct_time

time.mktime(tupletime: time.struct_time)

接受时间元组 time.struct_time 并返回时间戳 timestamp

time.sleep(secs: float|int)

推迟调用线程的运行,secs 指秒数。

time.strftime(fmt: str, tupletime: time.struct_time)

接收以时间元组,并返回以可读字符串表示的当地时间,格式由 fmt 决定。
其中 fmt 格式:

  • %Y 年份
  • %m 月份(十进制) [01,12]
  • %d 月份中的某一天 [01,31]
  • %H 小时(24 小时制)[00,23]
  • %M 分钟 [00,59]
  • %S 秒 [00,61]
  • %z 时区与 UTC 的偏移量
  • %a 星期缩写
  • %A 星期全称
  • %b 月份缩写
  • %B 月份全称
  • %c 适当日期和时间表示
  • %I 小时(12 小时制) [01,12]
  • %p AM or PM

time.strptime(str, fmt='%a %b %d %H:%M:%S %Y')

根据 fmt 的格式把一个时间字符串解析为时间元组。

time.time( )

返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

time.perf_counter()

返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。

time 模块 重要属性

time.timezone

属性 time.timezone 是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲<=0大部分欧洲,亚洲,非洲)。

time.tzname

属性 time.tzname 包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。

三种时间转换关系图

79

GMT时间元组和当地时间元组的区别

执行下面代码会发现,输出的元组除了小时其他都一样。差了8小时,因为北京时间是东八区。

import time

t = time.time()
a = time.gmtime(t)
b = time.localtime(t)

print(a)
print(b)

输出:

time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=8, tm_min=56, tm_sec=14, tm_wday=3, tm_yday=132, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=16, tm_min=56, tm_sec=14, tm_wday=3, tm_yday=132, tm_isdst=0)

但将这两个时间元组转换回时间戳会发现时间时间戳是一样的,当然这是肯定的,但是如何做到的呢?

import time

t = time.time()
a = time.gmtime(t)
b = time.localtime(t)
c = time.mktime(a)
d = time.mktime(b)
print(a)
print(b)
print(c)
print(d)

输出:

time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=9, tm_min=4, tm_sec=31, tm_wday=3, tm_yday=132, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=17, tm_min=4, tm_sec=31, tm_wday=3, tm_yday=132, tm_isdst=0)
1652317471.0
1652346271.0

因为时间元组中有个属性 tm_gmtoff 存放者与 GMT 时间偏移的信息量。

import time

t = time.time()
a = time.gmtime(t)
b = time.localtime(t)
c = time.mktime(a)
d = time.mktime(b)
print(a)
print(b)
print(c)
print(d)
print(a.tm_gmtoff)
print(b.tm_gmtoff)

输出:

time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=9, tm_min=7, tm_sec=45, tm_wday=3, tm_yday=132, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=5, tm_mday=12, tm_hour=17, tm_min=7, tm_sec=45, tm_wday=3, tm_yday=132, tm_isdst=0)
1652317665.0
1652346465.0
0
28800

Local 时间与 GMT 时间偏移了28800秒,正好是8小时。而偏移的秒数存放在 time.timezone 这个属性中。

赞 (0)

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论