本文介绍Python的time模块,是python常用的处理日期和时间的模块。
笔者也介绍了和time模块相关的calendar模块和datetime模块。
一、时间表示
常用的时间表示方法有以下三种:
- 时间戳(timestamp):通常来说,时间戳表示从1970年1月1日00:00:00开始按秒计算的偏移量,它的值是float类型,单位为秒;
- 格式化时间字符串(Format Time String):例如 “2016-03-20 11:45:39”;
- 结构化时间(struct_time),又称为时间元组(tupletime):struct_time是time模块定义的一个python类,有九个属性,如下表:
属性名 | 字段意义 | 值 |
---|---|---|
tm_year | 年(四位数) | 2020 |
tm_mon | 月 | 1到12 |
tm_mday | 日 | 1到31 |
tm_hour | 时 | 0到23 |
tm_min | 分 | 0到59 |
tm_sec | 秒 | 0到61(60或61是闰秒) |
tm_wday | 一周的第几日 | 0到6(0是周一) |
tm_yday | 一年的第几日 | 1到366(儒略历) |
tm_isdst | 夏令时 | 是否是夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认-1 |
二、time模块
下面介绍如何使用time模块获取时间,以及三种不同的时间表示方法间的相互转换。
1. 获取timestamp
time.time()
函数用于获取当前时间戳,如下例:
import time
timestamp = time.time()
print("当前时间戳:", timestamp)
输出为:
当前时间戳: 1611106259.0899193
2. 将timestamp转换为struct_time
time.localtime([secs])
函数用于将时间戳转换为struct_time,如果不传入形参,默认返回当前时间的struct_time,如下例:
import time
print("获取已有时间戳的struct_time:", time.localtime(1511106259.0899193))
print("获取当前时间的struct_time:", time.localtime(time.time()))
print("获取当前时间的struct_time:", time.localtime())
输出为:
获取已有时间戳的struct_time: time.struct_time(tm_year=2017, tm_mon=11, tm_mday=19, tm_hour=23, tm_min=44, tm_sec=19, tm_wday=6, tm_yday=323, tm_isdst=0)
获取当前时间的struct_time: time.struct_time(tm_year=2021, tm_mon=1, tm_mday=20, tm_hour=9, tm_min=40, tm_sec=24, tm_wday=2, tm_yday=20, tm_isdst=0)
获取当前时间的struct_time: time.struct_time(tm_year=2021, tm_mon=1, tm_mday=20, tm_hour=9, tm_min=40, tm_sec=24, tm_wday=2, tm_yday=20, tm_isdst=0)
3. 将struct_time转换为timestamp
time.mktime(tupletime)
函数用于将struct_time转换为timestamp,如下例:
import time
print(time.mktime(time.localtime()))
输出为:
1611109082.0
4. 将struct_time转换为Format Time String
4.1 简单转换
time.asctime([tupletime])
是一个简单的将struct_time转换为Format Time String的函数,如下例:
import time
print(time.asctime(time.localtime()))
print(time.asctime())
输出为:
Wed Jan 20 10:45:10 2021
Wed Jan 20 10:45:10 2021
但我们无法控制返回的Format Time String的格式。
4.2 转换为自定义的时间字符串
time.strftime(fmt[, tupletime])
函数用于将struct_time转换为自定义的Format Time String,参数tupletime
缺省时默认为当前时间,如下例:
import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print(time.strftime("%Y-%m-%d %H:%M:%S"))
print(time.strftime("%a %b %d %H:%M:%S", time.localtime()))
print(time.strftime("%c"))
输出为:
2021-01-20 10:08:03
2021-01-20 10:08:03
Wed Jan 20 10:08:03
Wed Jan 20 10:08:03 2021
python中时间日期格式化符号如下:
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(0000-9999)
- %m 月份的数字表示(01-12)
- %d 月内的一天(01-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(0-12)(大写’i’,不是小写‘L’)
- %M 分钟数(00-59)
- %S 秒数(00-59)
- %f 微秒 (000000-999999)
- %a 本地简化星期名称(Mon, Tue, Wed, Thu, Fri, Sat, Sun)
- %A 本地完整星期名称(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
- %b 本地简化月份名称(Jan, Feb, Mar, Apr, May, Jun, July, Aug, Sep, Oct, Nov, Dec)
- %B 本地完整月份名称(January, February, April, May, June, July, Augest, September, October, November, December)
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年内的星期数(00-53),星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始,注意
struct_time.tm_wday
是星期一为星期的开始 - %W 一年中的星期数(00-53),星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身
5. 将Format Time String转换为struct_time
time.strptime(str, fmt='%a %b %d %H:%M:%S %Y')
根据参数fmt
将时间字符串str
转换为struct_time,如下例:
import time
FTS0 = time.strftime("%Y-%m-%d %H:%M:%S")
FTS1 = time.strftime("%a %b %d %H:%M:%S %Y")
print(time.strptime(FTS0, "%Y-%m-%d %H:%M:%S"))
print(time.strptime(FTS1)) # time.strptime的fmt参数按默认值
输出为:
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=20, tm_hour=10, tm_min=36, tm_sec=12, tm_wday=2, tm_yday=20, tm_isdst=-1)
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=20, tm_hour=10, tm_min=36, tm_sec=12, tm_wday=2, tm_yday=20, tm_isdst=-1)
6. 将timestamp转换为Format Time String
time.ctime([secs])
用于将时间戳转换为Format Time String,相当于time.asctime(time.localtime(secs))
,参数缺省时相当于time.asctime()
,如下例:
import time
print(time.ctime(1511106259.0899193))
print(time.asctime(time.localtime(1511106259.0899193)))
print(time.ctime())
print(time.asctime())
输出为:
Sun Nov 19 23:44:19 2017
Sun Nov 19 23:44:19 2017
Wed Jan 20 10:50:37 2021
Wed Jan 20 10:50:37 2021
7. time模块的其他常用函数
函数 | 描述 |
---|---|
time.perf_counter() | 返回系统运行时间,由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。 |
time.process_time() | 返回进程运行时间,由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。 |
time.sleep(secs) | 推迟调用线程的运行,secs单位为秒。 |