python时间处理之time模块

343 阅读3分钟

time模块主要是围绕Unix Timestamp进行的。该模块主要包括一个类struct_time,另外几个其他函数及相关常量。需要注意的是该模块中的大多数函数是调用了所在平台C library的同名函数,所以要特别注意有些函数是与平台相关的,可能在不同的平台会有不同的效果。另外一点,该模块处理的日期处于1970-2038年之间,如果超过该范围,就要使用datetime了。 time模块重要的几种时间格式的关系如下图所示

time.jpg

下面详细介绍的方法及其使用

1.时间戳的相关处理

1.1 time.time()

返回当前时间的时间戳(1970纪元后经过的浮点秒数,float类型

import timeprint(time.time())

result:

1636210569.3580875

1.2 time.asctime()

接受时间元组并返回一个可读的形式,具体形式为:星期几 月 日 时:分:秒 年,字符串类型

print(time.asctime((2019, 1, 1, 9, 23, 30, 1, 1, 0)))

result:

Tue Jan  1 09:23:30 2019

1.3 time.ctime()

把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式)。 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于 asctime(localtime(secs)),字符串类型

默认情形

print(time.ctime(1))

result:

Thu Jan  1 08:00:01 1970

time.asctime()与time.ctime()虽然返回结果一样,但是入参不同。其中,time.asctime()的入参为时间元组的形式,time.ctime()的入参为数字类型。注意区分

1.4 time.localtime()

接收时间戳(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组, struct_time类型

print(time.localtime())

result:

time.struct_time(tm_year=2021, tm_mon=11, tm_mday=6, tm_hour=22, tm_min=59, tm_sec=22, tm_wday=5, tm_yday=310, tm_isdst=0)

struct_time总共包含9项,具体每一项的含义及取值如下:

字段含义取值
tm_year4位数字
tm_mon1-12
tm_mday1-31
tm_hour0-24
tm_min0-59
tm_sec0-61(闰秒)
tm_wday周几0-6(0代表周一)
tm_yday一年的第几天1-366(儒略历)
tm_isdst夏令时可取0或1,-1,1表示是夏令时, 0表示不是,-1(未知),默认 -1)

1.5 time.gmtime()

接收时间戳(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组。与time.localtime()不同,这里的tm_isdst始终为0

print(time.gmtime())

result:

time.struct_time(tm_year=2021, tm_mon=11, tm_mday=6, tm_hour=15, tm_min=0, tm_sec=48, tm_wday=5, tm_yday=310, tm_isdst=0)

1.6 time.mktime()

将一个struct_time格式的时间转换为时间戳,与time.localtime()的作用恰好相反

print(time.mktime(time.localtime()))

result:

1636211017.0

2.时间格式化

2.1 time.strftime()

time.strftime(format[, t])

将一个struct_time格式的时间转换为格式化的时间字符串。t的默认值是time.localtime()

print(time.strftime("%Y-%m-%d", time.localtime()))

result:

2021-11-16

常用到的格式化符号如下:

符号含义符号含义
%c本地相应的日期和时间表示%x(小写)本地相应的日期
%X(大写)本地相应的时间%y两位数的年份(去掉世纪)
%Y完整的年份%m月份(01-12)
%b简化版的英文单词月份,只取前三个字母%B完整版的英文单词月份
%d一月中的第几天(01-31)%j一年中的第几天(001-366)
%U一年中的第几周00-53),0是周日,第一周前的所有天数都在第0周%W(大写)和U基本相同,区别在于,0是周一
%w(小写)周几(0-6,0是周日)%A完整版的英文单词星期
%a简化版的英文单词星期,只取前三个字母%H一天中的第几个小时,24小时制
%I一天中的第几个小时,12小时制%p(小写)本地上午、下午的相应符,与%I连用
%M分钟数(00-59)%S(大写)秒数(0-61)
%Z时区的名字,不存在则为空字符%%%字符

2.2 time.strptime()

与time.strftime()相反,将一个格式化的时间字符串转换为struct_time格式的时间

print(time.strptime(time.ctime()))

result:

time.struct_time(tm_year=2021, tm_mon=11, tm_mday=16, tm_hour=23, tm_min=22, tm_sec=58, tm_wday=1, tm_yday=320, tm_isdst=-1)

3.其他

3.1 time.sleep()

线程推迟指定的时间运行,单位为秒