Python内置库:time
time模块包含用于获取当前时间 、操作时间和日期、从字符串中读取日期、将日期格式化为字符串函数。日期可以表示为自从 1970 年 1 月 1 日午夜(历元)经过了秒的一个实数,也可以表示为包含9个整数的元组。
一、时间戳与时间元组
1.1 时间戳
import time
a_sn=time.time()
print("当前时间戳为:", a_sn)
print(type(a_sn))
当前时间戳为: 1650422228.1764307
<class 'float'>
上面这个案例演示了用 time() 获取当前的时间戳。
1.2 时间元组
很多Python函数用一个元组装起来的9组数字处理时间:
索引 | 属性 | 字段 | 值 |
---|---|---|---|
0 | tm_year | 年 | 如2000,2022等 |
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 (60~61 是闰秒) |
6 | tm_wday | 星期 | 范围0~6 (0表示周一) |
7 | tm_yday | 第N日 | 1到366 |
8 | tm_isdst | 夏令时 | 0、1或-1 |
N/A | tm_zone | 时区 | 0、1或-1 |
N/A | tm_gmtoff | UTC东偏 | 以秒为单位 |
秒的取值范围为0~61,考虑到闰一秒或闰两秒的情形。夏令时数字是布尔值,如果使用-1,表示未知的,那么使用mktime()可能得到正确的值。
import time
b_sn=time.gmtime()
print(b_sn)
print(type(b_sn))
b_sn=time.gmtime(time.time())
print(b_sn)
print(type(b_sn))
c_sn=time.localtime()
print(c_sn)
print(type(c_sn))
c_sn=time.localtime(time.time())
print(c_sn)
print(type(c_sn))
time.struct_time(tm_year=2022, tm_mon=4, tm_mday=20, tm_hour=2, tm_min=48, tm_sec=57, tm_wday=2, tm_yday=110, tm_isdst=0)
<class 'time.struct_time'>
time.struct_time(tm_year=2022, tm_mon=4, tm_mday=20, tm_hour=2, tm_min=48, tm_sec=57, tm_wday=2, tm_yday=110, tm_isdst=0)
<class 'time.struct_time'>
time.struct_time(tm_year=2022, tm_mon=4, tm_mday=20, tm_hour=10, tm_min=48, tm_sec=57, tm_wday=2, tm_yday=110, tm_isdst=0)
<class 'time.struct_time'>
time.struct_time(tm_year=2022, tm_mon=4, tm_mday=20, tm_hour=10, tm_min=48, tm_sec=57, tm_wday=2, tm_yday=110, tm_isdst=0)
<class 'time.struct_time'>
上面这个案例演示了获取当前时间的时间元组。
localtime()的缺省值为time()返回的当前时间戳。
或:
import time
e_sn='03-12-21 23:23:23'
f_sn='98-09-08 12:13:14'
print(time.strptime(e_sn,'%y-%m-%d %H:%M:%S'))
print(time.strptime(f_sn,'%y-%m-%d %H:%M:%S'))
time.struct_time(tm_year=2003, tm_mon=12, tm_mday=21, tm_hour=23, tm_min=23, tm_sec=23, tm_wday=6, tm_yday=355, tm_isdst=-1)
time.struct_time(tm_year=1998, tm_mon=9, tm_mday=8, tm_hour=12, tm_min=13, tm_sec=14, tm_wday=1, tm_yday=251, tm_isdst=-1)
1.3 时间字符串
import time
d_sn=time.ctime()
e_sn=time.asctime(time.localtime())
print(d_sn)
print(e_sn)
print(type(d_sn))
print(type(e_sn))
Wed Apr 20 11:25:40 2022
Wed Apr 20 11:25:40 2022
<class 'str'>
<class 'str'>
此处也可直接使用asctime(),因为asctime()的缺省值为localtime()返回的当前时间。
亦可使用 ctime() , ctime() 等价于 asctime(localtime())。
二、时间格式化
使用 time 模块的strftime 方法来格式化日期:time.strftime(format[, t]),第一个参数是格式化字符串,第二个参数是时间元组。
import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
2022-04-20 11:29:42
Wed Apr 20 11:29:42 2022
上面的案例演示了将本地时间进行格式化输出。
指令 | 含意 | 备注 |
---|---|---|
%a | 本地化的缩写星期中每日的名称。 | |
%A | 本地化的星期中每日的完整名称。 | |
%b | 本地化的月缩写名称。 | |
%B | 本地化的月完整名称。 | |
%c | 本地化的适当日期和时间表示 | |
%d | 十进制数 [01,31] 表示的月中日 | |
%H | 十进制数 [00,23] 表示的小时(24小时制) | |
%I | 十进制数 [01,12] 表示的小时(12小时制) | |
%j | 十进制数 [001,366] 表示的年中日 | |
%m | 十进制数 [01,12] 表示的月 | |
%M | 十进制数 [00,59] 表示的分钟 | |
%p | 本地化的 AM 或 PM | (1) |
%S | 十进制数 [00,61] 表示的秒 | (2) |
%U | 十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。 在第一个星期日之前的新年中的所有日子都被认为是在第 0 周 | (3) |
%w | 十进制数 [0(星期日),6] 表示的周中日 | |
%W | 十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周 | (3) |
%x | 本地化的适当日期表示 | |
%X | 本地化的适当时间表示 | |
%y | 十进制数 [00,99] 表示的没有世纪的年份 | |
%Y | 十进制数表示的带世纪的年份 | |
%z | 十进制带符号数[-1200,+1200]表示时区 | |
%Z | 时区名称 | |
%% | 字面的 ‘%’ 字符 |
注释:
- 当与 strptime() 函数一起使用时,如果使用 %I 指令来解析小时, %p 指令只影响输出小时字段。
- 范围真的是 0 到 61 ;值 60 在表示 leap seconds 的时间戳中有效,并且由于历史原因支持值 61 。
- 当与 strptime() 函数一起使用时, %U 和 %W 仅用于指定星期几和年份的计算。
from time import gmtime, strftime
print(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()))
Wed, 20 Apr 2022 03:38:55 +0000
三、函数
函数 | 描述 |
---|---|
asctime([t]) | 将时间元组转换为字符串 |
ctime([secs]) | 将秒转换为字符串 |
localtime([secs]) | 将秒转换为当地时间的时间元组 |
gmtime([secs]) | 将秒转换为UTC时间的时间元组 |
mktime(t) | 将时间元组转换为当地时间 |
sleep(secs) | 休眠secs秒 |
strftime(format[, t]) | 将时间元组换为字符串 |
strptime(t[, format]) | 将字符串转换为时间元组 |
time() | 当前时间,自纪元以来的秒 |
四、术语及惯例
4.1 epoch 是时间开始的点, 其值取决于平台 。对于Unix, epoch 是1970年1月1日00:00:00(UTC)。要找出给定平台上的 epoch ,请查看
import time
print(time.gmtime(0))
结果(win):
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)
4.2 纪元秒数 是指自 epoch (纪元)时间点以来经过的总秒数,通常不包括 闰秒。 在所有符合 POSIX 标准的平台上,闰秒都不会记录在总秒数中。
4.3 此模块中的函数可能无法处理纪元之前或遥远未来的日期和时间。“遥远未来”的定义由对应的C语言库决定;对于32位系统,它通常是指2038年及以后。
4.4 函数 strptime() 在接收到 %y 格式代码时可以解析使用 2 位数表示的年份。当解析 2 位数年份时,函数会按照 POSIX 和 ISO C 标准进行年份转换:数值 69--99 被映射为 1969--1999;数值 0--68 被映射为 2000--2068。
import time
e_sn='03-12-21 23:23:23'