人人都会AI编程

14.1 time 模块:时间戳、结构化时间、格式化时间

更新时间:2026-07-12

时间处理在程序中无处不在,比如记录日志、设置缓存过期时间、计算任务耗时等。Python 的 time 模块是底层时间操作的基础,它主要处理三种时间表示形式:时间戳结构化时间格式化时间。理解这三种形式及它们之间的转换,是处理时间问题的基本功。

时间戳(timestamp)

时间戳是一个浮点数,表示从 1970 年 1 月 1 日 00:00:00(UTC) 到某个时间点经过的秒数(支持小数部分)。它是计算机中最常用的时间表示,方便进行数学运算和跨平台传递。

  • 获取当前时间戳
  import time
  t = time.time()        # 返回当前时间戳,如 1695000000.123456
  
  • 典型用途
  • 计算代码执行耗时:在 start = time.time()end = time.time() 之间求差值。
  • 作为唯一标识符(需要考虑并发时可能重复)。
  • 与 C 语言交互或进行底层网络通信时使用。

结构化时间(struct_time)

time.struct_time 是一个具有九个命名属性的元组,将时间拆分成人类容易理解的各个部分:年、月、日、时、分、秒、星期几、一年中的第几天、是否夏令时。属性列表如下:
| 索引 | 属性 | 说明 | 取值范围 |
|------|----------|--------------------------|---------------------|
| 0 | tm_year | 年 | 例如 2023 |
| 1 | tm_mon | 月 | 1 ~ 12 |
| 2 | tm_mday | 日 | 1 ~ 31 |
| 3 | tm_hour | 小时 | 0 ~ 23 |
| 4 | tm_min | 分钟 | 0 ~ 59 |
| 5 | tm_sec | 秒 | 0 ~ 61(含闰秒) |
| 6 | tm_wday | 星期几(星期一为0) | 0 ~ 6 |
| 7 | tm_yday | 一年中的第几天 | 1 ~ 366 |
| 8 | tm_isdst | 是否为夏令时 | 1:夏令时,0:非夏令时,-1:未知 |

  • 获取当前本地结构化时间
  local = time.localtime()   # 返回当前本地时区的 struct_time
  print(local.tm_year)       # 直接访问属性
  
  • 获取 UTC 时间
  utc = time.gmtime()        # UTC 时间的 struct_time
  
  • 典型用途:需要取出具体年、月、日等字段时使用,因为时间戳直接拆分会很麻烦。

格式化时间(时间字符串)

格式化时间是将时间以字符串形式展示,符合人类阅读习惯或接口规范,如 "2025-03-15 14:30:00"。通过格式指令控制输出的样式。

  • 将结构化时间转为字符串(格式化):
  s = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  # 结果如 "2025-03-15 14:30:00"
  
  • 将字符串解析为结构化时间(解析):
  t = time.strptime("2025-03-15 14:30:00", "%Y-%m-%d %H:%M:%S")
  # 返回 struct_time 对象
  
  • 常用格式指令
  • %Y:四位年份
  • %m:两位月份(01-12)
  • %d:两位日期(01-31)
  • %H:24小时制小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-59)
  • %A:星期全称
  • %B:月份全称
  • 典型用途:日志时间戳、API 返回的时间字段、前端展示。

三种形式之间的互相转换

实际开发中,经常需要在时间戳、结构化时间、字符串之间来回切换。转换思路如下:

  • 时间戳 → 结构化时间time.localtime(时间戳)time.gmtime(时间戳)
  • 结构化时间 → 时间戳time.mktime(struct_time) ← 注意,它始终将 struct_time 当作本地时间计算
  • 结构化时间 → 字符串time.strftime(格式, struct_time)
  • 字符串 → 结构化时间time.strptime(字符串, 格式)
  • 时间戳 → 字符串:先转为结构化时间,再格式化
  • 字符串 → 时间戳:先解析为结构化时间,再调用 mktime()

代码示例:获取当前时间并格式化为字符串

import time

now_stamp = time.time()
now_struct = time.localtime(now_stamp)
now_str = time.strftime("%Y-%m-%d %H:%M:%S", now_struct)
print(now_str)   # 输出如 "2025-03-15 14:30:00"

代码示例:将时间字符串转为时间戳

import time

time_str = "2025-03-15 14:30:00"
time_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
stamp = time.mktime(time_struct)   # 得到本地时区下的时间戳

通过 time 模块提供的这三种时间表示和转换函数,你可以灵活处理各种时间相关的需求。不过在日常开发中,如果涉及时区、日期算术等更复杂的操作,通常会结合下一节介绍的 datetime 模块一起使用,后者提供了更高级的抽象和便利方法。