一、time模块概述
time模块是Python处理时间的核心标准库,提供了各种时间相关的函数。它主要包含三类功能:
- 时间获取与表示(time()、ctime()、gmtime()等)
- 时间格式化(strftime()、strptime())
- 程序控制(sleep())
二、核心函数详解
1. 时间获取函数
import time
# 1. 时间戳(自1970-01-01 00:00:00 UTC起的秒数)
timestamp = time.time() # 输出:1633024567.123456
# 2. 本地时间结构体
local_time = time.localtime()
# 输出:time.struct_time(tm_year=2023, tm_mon=10, tm_mday=1, ...)
# 3. UTC时间结构体
utc_time = time.gmtime()
# 4. 可读时间字符串
readable_time = time.ctime() # 输出:"Sun Oct 1 12:56:07 2023"
2. 时间格式化与解析
# 时间结构体 -> 格式化字符串
formatted = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
# 输出:"2023-10-01 12:56:07"
# 字符串 -> 时间结构体
parsed_time = time.strptime("2023-10-01", "%Y-%m-%d")
常用格式符号:
%Y
:4位数年份%m
:月份(01-12)%d
:日(01-31)%H
:小时(00-23)%M
:分钟(00-59)%S
:秒(00-59)
3. 程序控制
# 暂停程序执行
print("开始执行...")
time.sleep(2.5) # 休眠2.5秒
print("2.5秒后继续执行")
# 性能测试
start = time.perf_counter()
# 执行代码...
end = time.perf_counter()
print(f"耗时:{end - start:.4f}秒")
三、高阶应用场景
1. 定时任务实现
def timer_task(interval):
while True:
print(f"执行定时任务 @ {time.ctime()}")
time.sleep(interval)
# 每5秒执行一次
# timer_task(5)
2. 耗时统计装饰器
def timeit(func):
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} 耗时: {end - start:.6f}秒")
return result
return wrapper
@timeit
def heavy_computation():
time.sleep(1.2)
heavy_computation()
3. 倒计时实现
def countdown(seconds):
for i in range(seconds, 0, -1):
print(f"\r倒计时: {i}秒", end="")
time.sleep(1)
print("\r倒计时结束!")
# countdown(10)
四、最佳实践与注意事项
时间戳选择:
time.time()
:适合时间间隔计算time.perf_counter()
:更高精度的性能测试
时区处理:
- 对于需要时区感知的应用,建议使用
datetime
模块 localtime()
获取的是系统设置的时区时间
- 对于需要时区感知的应用,建议使用
跨平台差异:
- Windows系统
time.sleep()
最小精度约15ms - Unix系统通常能达到更高精度
- Windows系统
性能优化:
- 避免在循环中频繁调用
time.time()
- 大量时间转换操作考虑使用
datetime
模块
- 避免在循环中频繁调用
五、time vs datetime
特性 | time模块 | datetime模块 |
---|---|---|
主要用途 | 基础时间操作 | 复杂日期时间处理 |
时区支持 | 有限 | 完善 |
接口复杂度 | 简单 | 较复杂 |
性能 | 更高 | 稍低 |
六、总结
time模块作为Python时间处理的基石,虽然功能相对基础,但在以下场景中仍不可替代:
- 需要高精度时间测量的场景
- 简单的延时控制
- 与C语言时间函数交互的场景
- 对性能要求极高的时间操作
对于更复杂的日期时间处理,建议结合datetime模块使用。正确理解和使用time模块,能够帮助开发者编写出更高效、可靠的时间相关代码。