Python time模块时间转换与处理详解
本文详细解析Python中time模块的核心功能,涵盖获取当前时间戳、理解struct_time元组的九个字段、以及世界时与本地时间的相互转换。通过time.gmtime、localtime、mktime、asctime、ctime和strftime等函数的实例,展示如何将时间数据在数值、元组与可读字符串之间灵活转换,并介绍time.sleep的线程暂停用法。
Python time模块基础与时间戳获取
time模块提供了处理时间转换的常用功能。
在Python中,时间戳通俗地指代某一特定时刻的时间,其计量单位为秒。
获取当前时间的时间戳方法如下:
调用time.time()函数。
该函数无需传入参数。
它返回自1970年1月1日00:00:00(UTC)起至当前时刻所经过的秒数。
time()函数是时间转换的基础,许多其他时间转换函数都以此返回值作为输入参数。
在任何时刻,都可以调用time函数将当前时间存入变量,从而记录该特定时刻。
例如,可以通过记录开始和结束的时间戳来计算某段代码执行所消耗的时间。

struct_time元组详解
struct_time元组:
该元组包含九个元素,可通过“年月日,时分秒,周天夏”这九个字进行记忆。
- 索引0对应tm_year,表示年份(如2019)。
- 索引1对应tm_mon,表示月份(范围1-12)。
- 索引2对应tm_mday,表示日期(范围1-31)。
- 索引3对应tm_hour,表示小时(范围0-23)。
- 索引4对应tm_min,表示分钟(范围0-59)。
- 索引5对应tm_sec,表示秒(范围0-61)。
- 索引6对应tm_wday,表示星期几(0-6)。
- 索引7对应tm_yday,表示一年中的第几天(0-366)。
- 索引8对应tm_isdst,表示夏令时状态(1表示使用夏令时,0表示不使用)。
许多时间函数的返回值均为struct_time元组格式。

获取本地区时可通过time.timezone属性。
该属性返回本地时区的总秒数,东时区为负值,西时区为正值,例如东八区的值为-8。
import time
zt=time.timezone
print(zt, zt/3600)
-28800 -8.0

时间戳与时间元组的相互转换
接下来介绍时间戳与时间元组之间的转换。
转换世界时(0时区)使用time.gmtime([s])函数。
该函数将以秒为单位的时间参数s(即时间戳)转换为时间元组。
若未提供参数s,则默认使用当前时间(即time.time()的返回值)。
示例如下:
#基准时间,验证时间戳是否从1970年1月1日00:00:00开始。
gmt=time.gmtime(0)
print(gmt)
---time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)print()
通过索引输出世界时时间的各项值。
for n in time.gmtime():
print(n,end='/')
---2019/6/29/9/27/39/5/180/0/
提取所需元素以输出具体时间。
now=time.gmtime()
print(f'\n{now[0]}年/{now[1]}月{now[2]}日 '
f'{now[3]}:{now[4]}:{now[5]}')
---2019年/6月29日 9:39:40

转换本地时间(本地区时)使用time.localtime(s)函数。
其功能与世界时转换类似,区别在于它是在0时区的基础上加上计算机提供的时区偏移量。
import tim
lt=time.localtime()
print(lt)
---time.struct_time(tm_year=2019, tm_mon=6, tm_mday=29, tm_hour=18, tm_min=11, tm_sec=14, tm_wday=5, tm_yday=180, tm_isdst=0)
print(f'\n8区时:{lt[0]}年/{lt[1]}月{lt[2]}日 '
f'{lt[3]}:{lt[4]}:{lt[5]}')
gt=time.gmtime()
print(f'\n世界时:{gt[0]}年/{gt[1]}月{gt[2]}日 '
f'{gt[3]}:{gt[4]}:{gt[5]}')
东8区示例时间:2019年/6月29日 18:12:47
世界时示例时间:2019年/6月29日 10:12:47
北京时间与世界时相差8小时。
若电脑系统设置了夏令时,索引[8]的值为1。

将时间元组转换为时间戳使用time.mktime(t)函数。
该函数是localtime()的反函数,用于将元组时间转换为从基准时间到参数t时间的秒数。
参数t必须是时间元组(struct_time)或包含9个元素的元组。
lt=time.localtime()
s=time.mktime(lt)
print(s)

时间元组与可读字符串的转换
直接输出可读时间。
转换时间元组为可读字符串使用time.asctime(t)函数。
参数t为时间元组。前文提到localtime()和gmtime()函数的返回值是将时间戳转换为时间元组,因此可直接将它们的返回值作为asctime()的参数,返回一个可读的时间字符串。
now=time.asctime(time.gmtime())
print('世界时:',now)
世界时输出示例: Sat Jun 29 10:42:02 2019
若未提供参数t,则默认使用localtime()返回的当前时间。
示例如下:
print('本地时:',time.asctime())
本地时输出示例: Sat Jun 29 18:42:02 2019

转换时间戳为可读本地时间使用time.ctime(s)函数。
参数s是一个时间戳,其转换结果格式与time.asctime()完全相同,仅参数类型不同。
print(time.ctime(11111111111))
---Mon Feb 6 03:45:11 2322
转换得到的可读时间是本地时间。
若未提供参数s,则默认值为当时的本地时间,与asctime的默认返回结果一致。
print(time.ctime())
print(time.asctime())
---Sat Jun 29 19:22:16 2019
---Sat Jun 29 19:22:16 2019

时间格式化与字符串解析
格式化指令符的应用。
字符串格式化时间使用time.strftime(f[, t])函数。
该函数将gmtime()或localtime()返回的由元组或struct_time表示的时间,转换为由format参数指定的字符串。
参数f是指定的格式化指令。
参数t是时间元组,默认值为localtime()返回的当前时间。若提供t参数,需注意其值不能超出有效范围(例如不能用20来给月份赋值)。
具体指令见图片。
示例如下:
import time
t=time.strftime("%Y-%m-%d,%H:%M:%S")
print(t)---2019-06-29,20:44:22
需要注意的是,字符串中直接包含中文字符通常无法正确解析。

含中文输出时间的示例如下:
字符串元组中的数据若缺乏命令符支持,且命令符中包含中文会较为繁琐,此时建议使用f-string格式化,可搭配多个函数使用。
示例如下:
import time
lt=time.localtime()
now=f'{lt[0]}年{lt[1]}月{lt[2]}日,' \
f'\n{lt[3]}:{lt[4]}:{lt[5]}' \
f'\n星期{lt[6]}' \
f'\n本年的第{lt[7]}天' \
f'\n本年的第{time.strftime("%U")}周'
print(now)

字符串时间转换为时间元组使用time.strptime(s,f)函数。
该函数返回一个元组字符串。
参数s是按时间元组提供的数字,但以字符串形式表示,例如“2019,8,25”。
参数f是时间命令符,必须与s参数的格式对应。
示例如下:
sp=time.strptime('2019,3,30',"%Y,%m,%d")
print(sp)

线程暂停功能
利用time.sleep函数暂停调用线程运行。
time.sleep(s):暂停s秒后继续调用线程运行,参数s可以是浮点数。
import time
a=1
while a<5:
print(time.ctime())
time.sleep(1)
a+=1

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









