Python 的 time
模块是处理时间相关操作的核心库,提供了时间获取、格式转换、延时执行和性能计时等功能。以下是其核心内容及常用函数的详细说明:
一、时间表示形式
time
模块操作的时间主要有三种表示形式:
-
时间戳(Timestamp)
- 从 Epoch(1970-01-01 00:00:00 UTC) 到当前时刻的秒数(浮点数)。
- 示例:
1680000000.123456
-
结构化时间(struct_time)
- 包含 9 个属性的元组,用于直观表示时间(如年、月、日等)。
- 示例:
tm_year=2023, tm_mon=3, tm_mday=28, tm_hour=15, tm_min=30, tm_sec=45, tm_wday=1, tm_yday=87, tm_isdst=0
-
格式化字符串(Formatted String)
- 按照指定格式(如
%Y-%m-%d %H:%M:%S
)展示的时间字符串。 - 示例:
"2023-03-28 15:30:45"
- 按照指定格式(如
二、核心函数分类
1. 时间获取
函数 | 功能 | 示例 |
---|---|---|
time.time() | 返回当前时间戳(浮点数,精确到微秒) | timestamp = time.time() # 1680000000.123456 |
time.localtime([secs]) | 将时间戳转换为本地时间的 struct_time 对象(不传参则用当前时间) | local_time = time.localtime(1680000000) |
time.gmtime([secs]) | 将时间戳转换为UTC时间的 struct_time 对象 | utc_time = time.gmtime(1680000000) |
time.ctime([secs]) | 将时间戳转换为可读字符串(如 "Tue Mar 28 15:30:45 2023" ) | print(time.ctime()) # "Tue Mar 28 15:30:45 2023" |
2. 时间格式转换
函数 | 功能 | 示例 |
---|---|---|
time.strftime(format, t) | 将 struct_time 对象转换为格式化字符串 | python<br>t = time.localtime()<br>s = time.strftime("%Y-%m-%d", t) # "2023-03-28" |
time.strptime(string, format) | 将格式化字符串解析为 struct_time 对象 | python<br>s = "2023-03-28"<br>t = time.strptime(s, "%Y-%m-%d") |
time.mktime(t) | 将本地时间的 struct_time 转换为时间戳 | timestamp = time.mktime(t) |
time.asctime([t]) | 将 struct_time 转换为可读字符串(同 ctime ,默认用当前时间) | print(time.asctime()) # "Tue Mar 28 15:30:45 2023" |
3. 延时与计时
函数 | 功能 | 示例 |
---|---|---|
time.sleep(secs) | 暂停程序执行指定秒数(支持浮点数,如 0.5 秒) | time.sleep(2.5) # 暂停2.5秒 |
time.perf_counter() | 返回高精度计时器值(用于测量短时间间隔,包含睡眠时间) | python<br>start = time.perf_counter()<br># 执行代码...<br>end = time.perf_counter()<br>print(f"耗时:{end - start:.6f}秒") |
time.process_time() | 返回当前进程的CPU时间(不包含睡眠时间,适合性能分析) | 用法同 perf_counter ,但仅计算CPU时间。 |
4. 其他实用函数
函数 | 功能 | 示例 |
---|---|---|
time.timezone | 本地时区与UTC的偏移秒数(西时区为负,东时区为正) | print(time.timezone) # -28800(UTC+8) |
time.tzname | 包含本地时区名称的元组(标准时区和夏令时时区) | print(time.tzname) # ('CST', 'CST') |
三、时间格式化符号
符号 | 含义 | 示例 |
---|---|---|
%Y | 四位数的年份 | 2023 |
%m | 两位数的月份(01-12) | 03 |
%d | 两位数的日期(01-31) | 28 |
%H | 24小时制的小时(00-23) | 15 |
%M | 分钟(00-59) | 30 |
%S | 秒(00-59) | 45 |
%A | 完整的星期名称 | Tuesday |
%a | 简写的星期名称 | Tue |
%B | 完整的月份名称 | March |
%b | 简写的月份名称 | Mar |
%c | 本地日期和时间表示 | Tue Mar 28 15:30:45 2023 |
%Z | 时区名称 | CST |
四、示例代码
1. 获取并格式化当前时间
import time
# 获取当前时间戳
timestamp = time.time()
print(f"时间戳:{timestamp}")
# 转换为结构化时间
struct_time = time.localtime(timestamp)
print(f"结构化时间:{struct_time.tm_year}-{struct_time.tm_mon}-{struct_time.tm_mday}")
# 格式化为字符串
formatted = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)
print(f"格式化时间:{formatted}")
2. 计算代码执行时间
start = time.perf_counter()
# 模拟耗时操作
time.sleep(1.5)
end = time.perf_counter()
print(f"耗时:{end - start:.2f}秒") # 输出:耗时:1.50秒
3. 解析字符串为时间对象
date_str = "2023-03-28"
parsed_time = time.strptime(date_str, "%Y-%m-%d")
print(f"解析后的月份:{parsed_time.tm_mon}") # 输出:3
五、注意事项
-
时区处理
time
模块默认使用操作系统的时区设置,跨时区应用建议使用datetime
模块或第三方库(如pytz
)。
-
性能计时选择
- 短时间测量用
perf_counter
,进程CPU时间用process_time
,避免使用已弃用的clock()
。
- 短时间测量用
-
浮点数精度
- 时间戳和
sleep()
支持微秒级精度,但实际精度依赖操作系统。
- 时间戳和
通过灵活组合这些函数,可以高效处理时间戳转换、任务调度、性能分析等场景。