前端 Python 3.12

time

标准库时间:挂钟与单调时钟、perf 计时、sleep、struct_time、格式化与解析、时区相关变量;链回标准库导读与官方 time 手册。

time 提供 时间戳、睡眠、日历时间与格式化 等底层接口;需要「带时区的 datetime 对象、算术与 ISO 8601」时,日常更常用 datetime(可与本文的 struct_time / strftime 互转)。

模块成员总览

下表按用途归类(3.12 常见导出;thread_time* 在部分平台不可用)。后文各节展开用法与注意点。

类型

名称字段(索引 / 属性)说明
struct_timetm_yeartm_isdst(0–8);3.3+ 可选 tm_zonetm_gmtoff(9–10)。月 tm_mon1–12tm_isdst-1 未知、0 非夏令时、1 夏令时日历时间的结构化元组(struct time,命名元组)

时钟:戳、间隔与 CPU 时间

名称返回值说明
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查询指定时钟的元信息

日历:struct_time 与字符串

名称返回值说明
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阻塞当前线程指定秒数

时区模块变量(本地配置,非 IANA 时区库)

名称类型说明
timezoneint(秒)标准时相对 UTC 的偏移秒数
altzoneint(秒)夏令时相对 UTC 的偏移秒数(alternate zone)
daylightint(0 或 非 0)系统是否配置夏令时(daylight saving)
tznametuple[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 等时钟是否单调、分辨率等。

sleep

import time
time.sleep(0.5)  # 秒,可为 float;实际精度受 OS 调度影响
  • 非忙等;在异步代码里应使用 asyncio.sleep,不要用 time.sleep 阻塞事件循环。

struct_time 与转换

API作用
gmtime([secs])UTC 的 struct_timesecs 默认当前 time()
localtime([secs])本地 struct_time(受系统时区影响)
mktime(t)本地 struct_time → 与 time() 兼容的秒数(夏令时坑见下)
asctime([t]) / ctime([secs])固定格式的英文时间串(偏遗留,新代码可优先 datetime

struct_time 字段含 tm_yeartm_montm_mdaytm_hourtm_mintm_sectm_wdaytm_ydaytm_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

时区与夏令时(了解)

模块级变量含义
timezoneUTC 与本地标准时间的固定偏移(秒,非夏令时)
altzone若有夏令时,与 UTC 的偏移
daylight系统是否配置夏令时
tzname标准时区名与夏令时名元组

跨区展示、存储与算术建议用 zoneinfo(3.9+)datetimetzinfo,不要只靠这些整数偏移。

纳秒变体(3.7+)

time_ns()monotonic_ns()perf_counter_ns() 等返回 int,避免浮点累积误差;与秒函数成对使用,不要混用单位

易错点(排错速记)

  • time() 测「过了多久」:时钟可能被调整,间隔不准;改用 monotonicperf_counter
  • mktime 与夏令时:歧义时刻行为依赖平台;关键业务用 datetime + 显式时区。
  • strftime / strptime 与 locale:部分格式受区域设置影响;要稳定输出用固定格式或 datetime ISO。
  • 精度≠实时sleep 与短间隔计时都受调度器粒度限制;硬实时请用 OS/专用栈。

资料:time 文档

On this page