news 2026/5/10 13:50:42

09-扩展知识——10. time 模块核心函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
09-扩展知识——10. time 模块核心函数

10. time 模块核心函数

概述

time模块是 Python 底层的时间处理模块,提供了时间戳、程序休眠、性能计时等核心功能。它是datetime模块的基础,适合对性能要求较高的场景。

维度内容
What底层时间函数,提供时间戳、休眠、计时等功能
Why高性能时间操作,系统级时间调用
When性能测试、超时控制、定时任务
Whereimport time
Who需要底层时间控制的开发者
Howtime.time(),time.sleep(2),time.perf_counter()

1. time 模块概述

1.1 模块导入

importtime# 查看模块信息print(time.__doc__)

1.2 核心功能分类

类别函数用途
时间获取time(),monotonic(),perf_counter()获取时间戳
时间转换gmtime(),localtime(),mktime(),ctime()时间格式转换
程序控制sleep()程序休眠
性能计时perf_counter(),process_time(),thread_time()代码性能测试
时区信息timezone,altzone,daylight,tzname系统时区常量

2. 时间获取函数

2.1 time() - 获取时间戳

importtime# 获取当前时间戳(浮点数,秒)timestamp=time.time()print(f"时间戳:{timestamp}")# 时间戳的整数部分print(f"整数秒:{int(timestamp)}")# 时间戳的微秒部分print(f"微秒:{int((timestamp%1)*1000000)}")

2.2 monotonic() - 单调时钟

importtime# 单调时钟,不受系统时间调整影响start=time.monotonic()time.sleep(1)end=time.monotonic()print(f"耗时:{end-start:.3f}秒")# 适合测量时间间隔,不适合获取当前时间

2.3 perf_counter() - 高性能计数器

importtime# 最高精度时钟,适合短时间测量start=time.perf_counter()# 执行代码foriinrange(1000000):passend=time.perf_counter()print(f"循环耗时:{end-start:.6f}秒")

2.4 process_time() - 进程 CPU 时间

importtime# 进程 CPU 时间(不包括 sleep 时间)start=time.process_time()time.sleep(1)# sleep 不计入foriinrange(1000000):passend=time.process_time()print(f"CPU 时间:{end-start:.6f}秒")

2.5 thread_time() - 线程 CPU 时间

importtimeimportthreadingdefworker():start=time.thread_time()foriinrange(1000000):passend=time.thread_time()print(f"线程 CPU 时间:{end-start:.6f}秒")t=threading.Thread(target=worker)t.start()t.join()

3. 程序控制函数

3.1 sleep() - 程序休眠

importtimeprint("开始休眠...")time.sleep(2)# 休眠 2 秒print("休眠结束")# 浮点数精度time.sleep(0.5)# 休眠 0.5 秒# 在循环中使用foriinrange(3):print(f"计数:{i+1}")time.sleep(1)

3.2 带进度条的 sleep

importtimedefsleep_with_progress(seconds):"""带进度条的休眠"""foriinrange(seconds):percent=(i+1)/seconds*100bar="█"*(i+1)+"░"*(seconds-i-1)print(f"\r进度: |{bar}|{percent:.0f}%",end="",flush=True)time.sleep(1)print()sleep_with_progress(5)

4. 时间转换函数

4.1 gmtime() - UTC 时间元组

importtime# 获取 UTC 时间元组utc_time=time.gmtime()print(f"UTC:{utc_time}")# 从时间戳转换utc_time2=time.gmtime(1745030000)print(f"UTC 从时间戳:{utc_time2}")

4.2 localtime() - 本地时间元组

importtime# 获取本地时间元组local_time=time.localtime()print(f"本地:{local_time}")# 访问各个字段print(f"年:{local_time.tm_year}")print(f"月:{local_time.tm_mon}")print(f"日:{local_time.tm_mday}")print(f"时:{local_time.tm_hour}")print(f"分:{local_time.tm_min}")print(f"秒:{local_time.tm_sec}")print(f"星期:{local_time.tm_wday}")# 0=周一print(f"年中的第几天:{local_time.tm_yday}")print(f"夏令时:{local_time.tm_isdst}")

4.3 mktime() - 时间元组转时间戳

importtime# 创建时间元组t=time.localtime()print(f"时间元组:{t}")# 转换为时间戳timestamp=time.mktime(t)print(f"时间戳:{timestamp}")

4.4 ctime() - 固定格式字符串

importtime# 当前时间的字符串表示print(time.ctime())# Sun Apr 19 10:30:00 2026# 从时间戳转换print(time.ctime(1745030000))# Sun Apr 19 10:30:00 2026

4.5 asctime() - 时间元组转字符串

importtime# 时间元组转字符串print(time.asctime())# Sun Apr 19 10:30:00 2026# 从指定时间元组t=(2026,4,19,14,30,0,6,109,0)print(time.asctime(t))# Sun Apr 19 14:30:00 2026

5. 性能计时

5.1 装饰器计时

importtimefromfunctoolsimportwrapsdeftimer(func):"""计时装饰器"""@wraps(func)defwrapper(*args,**kwargs):start=time.perf_counter()result=func(*args,**kwargs)end=time.perf_counter()print(f"{func.__name__}耗时:{end-start:.6f}秒")returnresultreturnwrapper@timerdefslow_function():time.sleep(1)return"完成"slow_function()

5.2 上下文管理器计时

importtimeclassTimer:def__enter__(self):self.start=time.perf_counter()returnselfdef__exit__(self,*args):self.end=time.perf_counter()self.elapsed=self.end-self.startprint(f"耗时:{self.elapsed:.6f}秒")# 使用withTimer()astimer:time.sleep(1)

6. 时区常量

importtime# 本地时区偏移(秒,UTC 以西为正)print(f"timezone:{time.timezone}")# -28800(东八区)# 夏令时时区偏移print(f"altzone:{time.altzone}")# -32400# 是否使用夏令时print(f"daylight:{time.daylight}")# 0 或 1# 时区名称print(f"tzname:{time.tzname}")# ('CST', 'CST')

7. 完整示例

importtimeprint("="*50)print("time 模块综合示例")print("="*50)# 1. 时间戳print("\n1. 时间戳")now=time.time()print(f"当前时间戳:{now}")print(f"整数秒:{int(now)}")# 2. 程序休眠print("\n2. 程序休眠")print("开始...")time.sleep(1)print("1秒后...")time.sleep(0.5)print("0.5秒后...")# 3. 时间转换print("\n3. 时间转换")print(f"本地时间元组:{time.localtime()}")print(f"UTC 时间元组:{time.gmtime()}")print(f"字符串格式:{time.ctime()}")# 4. 性能计时print("\n4. 性能计时")start=time.perf_counter()total=0foriinrange(1000000):total+=i end=time.perf_counter()print(f"循环 100 万次求和耗时:{end-start:.6f}秒")# 5. 时区信息print("\n5. 时区信息")print(f"时区偏移:{time.timezone}秒")print(f"时区名称:{time.tzname}")

8. 性能对比

importtime# 对比不同时钟的精度print("时钟精度对比:")print(f"time():{time.time()}")print(f"monotonic():{time.monotonic()}")print(f"perf_counter():{time.perf_counter()}")print(f"process_time():{time.process_time()}")# 测量代码执行时间defmeasure_execution_time(func,*args,**kwargs):"""测量函数执行时间"""start=time.perf_counter()result=func(*args,**kwargs)end=time.perf_counter()returnresult,end-start# 测试deftest_func(n):total=0foriinrange(n):total+=ireturntotal result,elapsed=measure_execution_time(test_func,10000000)print(f"结果:{result}, 耗时:{elapsed:.6f}秒")

9. 常见陷阱

陷阱说明解决方案
系统时间调整time()受系统时间影响使用monotonic()
精度限制不同平台精度不同使用perf_counter()
sleep 精度sleep()不保证精确使用循环 +perf_counter()
时区混淆localtime()使用系统时区明确指定时区

10. datetime vs time 选择

场景推荐原因
日常日期操作datetime功能丰富,易用
性能计时time.perf_counter()高精度
时间戳存储time.time()简单高效
程序休眠time.sleep()唯一选择
时区处理zoneinfo/datetime功能完整

11. 总结

函数用途返回值
time()获取时间戳float
sleep(sec)程序休眠None
perf_counter()高性能计时float
monotonic()单调时钟float
localtime()本地时间元组struct_time
gmtime()UTC 时间元组struct_time
ctime()字符串格式str
strftime()自定义格式str
strptime()解析字符串struct_time

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 13:49:57

【Linux】从源码到应用:手把手编译部署 Tcl/Tk 8.6.10

1. 为什么需要手动编译Tcl/Tk? 很多Linux发行版自带了Tcl/Tk的软件包,但版本往往比较老旧。我在维护一个老项目时就遇到过这种情况——系统自带的Tcl 8.5缺少我们需要的几个关键特性,导致程序频繁崩溃。更麻烦的是,直接使用包管理…

作者头像 李华
网站建设 2026/5/10 13:46:45

如何永久保存微信聊天记录?这款开源工具让你的数字记忆永不丢失

如何永久保存微信聊天记录?这款开源工具让你的数字记忆永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending…

作者头像 李华
网站建设 2026/5/10 13:44:28

完全掌控你的数字记忆:WeChatMsg如何重塑个人数据主权

完全掌控你的数字记忆:WeChatMsg如何重塑个人数据主权 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…

作者头像 李华
网站建设 2026/5/10 13:40:40

Conduit:为自托管Open WebUI打造原生移动客户端的技术实践

1. 项目概述:为什么我们需要一个原生的 Open WebUI 移动客户端如果你和我一样,在本地部署了 Ollama,并且用 Open WebUI 搭建了一个功能强大的 AI 聊天桌面端,那么你肯定也遇到过这个痛点:在手机上打开浏览器&#xff0…

作者头像 李华
网站建设 2026/5/10 13:38:42

CAJ转PDF:打破知网文献格式壁垒的开源解决方案

CAJ转PDF:打破知网文献格式壁垒的开源解决方案 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华