time
标准库时间:挂钟与单调时钟、perf 计时、sleep、struct_time、格式化与解析、时区相关变量;链回标准库导读与官方 time 手册。
time 提供 时间戳、睡眠、日历时间与格式化 等底层接口;需要「带时区的 datetime 对象、算术与 ISO 8601」时,日常更常用 datetime(可与本文的 struct_time / strftime 互转)。
下表按用途归类(3.12 常见导出;thread_time* 在部分平台不可用)。后文各节展开用法与注意点。
| 名称 | 字段(索引 / 属性) | 说明 |
|---|
struct_time | tm_year…tm_isdst(0–8);3.3+ 可选 tm_zone、tm_gmtoff(9–10)。月 tm_mon 为 1–12;tm_isdst:-1 未知、0 非夏令时、1 夏令时 | 日历时间的结构化元组(struct time,命名元组) |
| 名称 | 返回值 | 说明 |
|---|
time() | float(纪元秒) | 当前 Unix 纪元时间戳 |
time_ns() | int(纪元纳秒) | 当前纪元时间戳(纳秒) |
monotonic() | float | 单调时钟读数 |
monotonic_ns() | int | 单调时钟读数 |
perf_counter() | float | 性能计数器读数 |
perf_counter_ns() | int | 性能计数器读数(纳秒) |
process_time() | float | 当前 进程 累计 CPU 时间 |
process_time_ns() | int | 当前 进程 累计 CPU 时间(纳秒) |
thread_time() | float | 当前 线程 累计 CPU 时间 |
thread_time_ns() | int | 当前 线程 累计 CPU 时间(纳秒) |
get_clock_info(name) | namespace | 查询指定时钟的元信息 |
| 名称 | 返回值 | 说明 |
|---|
gmtime([secs]) | struct_time | 纪元秒 → UTC 日历时间(GMT time) |
localtime([secs]) | struct_time | 纪元秒 → 本地日历时间(local time) |
mktime(t) | float | 本地日历时间 → 纪元秒(make time) |
asctime([t]) | str | 日历时间 → 固定英文串(ASCII time) |
ctime([secs]) | str | 纪元秒 → 本地时间的固定英文串 |
strftime(format[, t]) | str | 按格式串格式化日历时间为字符串(string format time) |
strptime(string[, format]) | struct_time | 按格式串解析字符串为日历时间(parse time) |
| 名称 | 返回值 | 说明 |
|---|
sleep(secs) | None | 阻塞当前线程指定秒数 |
| 名称 | 类型 | 说明 |
|---|
timezone | int(秒) | 标准时相对 UTC 的偏移秒数 |
altzone | int(秒) | 夏令时相对 UTC 的偏移秒数(alternate zone) |
daylight | int(0 或 非 0) | 系统是否配置夏令时(daylight saving) |
tzname | tuple[str, str] | 标准时区名与夏令时名(time zone name) |
| 函数 | 适用场景 | 注意 |
|---|
time() | Unix 时间戳(通常自 1970-01-01 UTC),秒,浮点 | 系统可调时钟,不适合严格测间隔或超时 |
monotonic() / monotonic_ns() | 间隔、超时、重试退避 | 前进、不受 NTP 回调影响;**-**日历语义 |
perf_counter() / perf_counter_ns() | 代码片段耗时(基准、profile) | 最高可用分辨率;仅保证差值有意义 |
thread_time() / thread_time_ns()(若可用) | 当前线程 CPU 时间 | 平台可用性见文档 |
import time
t0 = time.perf_counter()
time.sleep(0.1)
dt = time.perf_counter() - t0
get_clock_info(name):查询 time / monotonic / perf_counter 等时钟是否单调、分辨率等。
import time
time.sleep(0.5) # 秒,可为 float;实际精度受 OS 调度影响
- 非忙等;在异步代码里应使用
asyncio.sleep,不要用 time.sleep 阻塞事件循环。
| API | 作用 |
|---|
gmtime([secs]) | UTC 的 struct_time;secs 默认当前 time() |
localtime([secs]) | 本地 struct_time(受系统时区影响) |
mktime(t) | 本地 struct_time → 与 time() 兼容的秒数(夏令时坑见下) |
asctime([t]) / ctime([secs]) | 固定格式的英文时间串(偏遗留,新代码可优先 datetime) |
struct_time 字段含 tm_year、tm_mon、tm_mday、tm_hour、tm_min、tm_sec、tm_wday、tm_yday、tm_isdst 等;月从 1 开始,与 datetime.month 一致。
import time
t = time.localtime()
s = time.strftime("%Y-%m-%d %H:%M:%S", t)
t2 = time.strptime(s, "%Y-%m-%d %H:%M:%S")
| 函数 | 说明 |
|---|
strftime(format, t) | struct_time → 字符串;t 默认 localtime() |
strptime(string, format) | 字符串 → struct_time(解析为本地语义,与 datetime.strptime 行为细节不同,复杂场景优先 datetime) |
| 模块级变量 | 含义 |
|---|
timezone | UTC 与本地标准时间的固定偏移(秒,非夏令时) |
altzone | 若有夏令时,与 UTC 的偏移 |
daylight | 系统是否配置夏令时 |
tzname | 标准时区名与夏令时名元组 |
跨区展示、存储与算术建议用 zoneinfo(3.9+) 或 datetime 带 tzinfo,不要只靠这些整数偏移。
time_ns()、monotonic_ns()、perf_counter_ns() 等返回 int,避免浮点累积误差;与秒函数成对使用,不要混用单位。
time() 测「过了多久」:时钟可能被调整,间隔不准;改用 monotonic 或 perf_counter。
mktime 与夏令时:歧义时刻行为依赖平台;关键业务用 datetime + 显式时区。
strftime / strptime 与 locale:部分格式受区域设置影响;要稳定输出用固定格式或 datetime ISO。
- 精度≠实时:
sleep 与短间隔计时都受调度器粒度限制;硬实时请用 OS/专用栈。
资料:time 文档