Python time模块时间格式化教程 - 详解strftime与strptime
- Python
- 2025-08-09
- 49
Python time模块时间格式化完全指南
在Python编程中,处理时间和日期是常见的需求。time模块提供了各种时间处理功能,其中时间格式化是最常用的操作之一。本教程将详细讲解如何使用time模块进行时间格式化操作。
时间表示基础
在Python中,time模块处理时间主要有三种表示形式:
- 时间戳(Timestamp):从1970年1月1日00:00:00 UTC开始计算的秒数(浮点数)
- 时间元组(struct_time):包含9个元素的时间元组
- 格式化时间字符串:可读性好的时间表示,如"2023-10-15 14:30:00"
获取当前时间
import time
# 获取当前时间戳
timestamp = time.time()
print(f"当前时间戳: {timestamp}")
# 获取当前时间的时间元组
time_tuple = time.localtime()
print(f"当前时间元组: {time_tuple}")
# 获取格式化的当前时间
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")
print(f"格式化时间: {formatted_time}")
时间格式化符号详解
下表列出了time模块中常用的时间格式化指令:
指令 | 含义 | 示例 |
---|---|---|
%Y | 四位数年份 | 2023 |
%y | 两位数年份 | 23 |
%m | 月份(01-12) | 10 |
%d | 月内中的一天(01-31) | 15 |
%H | 24小时制小时数(00-23) | 14 |
%I | 12小时制小时数(01-12) | 02 |
%M | 分钟数(00-59) | 30 |
%S | 秒(00-59) | 45 |
%A | 本地完整星期名称 | Sunday |
%a | 本地简化星期名称 | Sun |
%B | 本地完整月份名称 | October |
%b | 本地简化月份名称 | Oct |
%p | 本地AM或PM的等价符 | PM |
%j | 年内的一天(001-366) | 288 |
%U | 一年中的星期数(00-53)星期日为星期的开始 | 41 |
%w | 星期(0-6),0表示星期日 | 0 |
%x | 本地相应的日期表示 | 10/15/23 |
%X | 本地相应的时间表示 | 14:30:45 |
%Z | 当前时区的名称 | CST |
strftime函数:时间格式化
time.strftime(format[, t])
函数用于将时间元组或时间戳转换为格式化的时间字符串。
基本用法示例
import time
# 获取当前时间的时间元组
current_time = time.localtime()
# 格式化为常见的日期时间字符串
print(time.strftime("%Y-%m-%d %H:%M:%S", current_time)) # 2023-10-15 14:30:45
# 包含星期和月份名称的格式
print(time.strftime("%A, %B %d, %Y", current_time)) # Sunday, October 15, 2023
# 12小时制格式
print(time.strftime("%I:%M:%S %p", current_time)) # 02:30:45 PM
# 自定义格式
print(time.strftime("今天是%Y年的第%j天,第%U周", current_time))
strptime函数:字符串解析为时间
time.strptime(string, format)
函数用于将格式化的时间字符串解析为时间元组。
基本用法示例
import time
# 将字符串解析为时间元组
time_str = "2023-10-15 14:30:45"
parsed_time = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print(parsed_time)
# 解析包含月份名称的字符串
time_str2 = "October 15, 2023"
parsed_time2 = time.strptime(time_str2, "%B %d, %Y")
print(parsed_time2)
# 解析12小时制时间
time_str3 = "02:30:45 PM"
parsed_time3 = time.strptime(time_str3, "%I:%M:%S %p")
print(parsed_time3)
提示: 使用strptime时,格式字符串必须与输入字符串完全匹配,否则会引发ValueError。
时间转换综合应用
时间戳与格式化字符串互转
import time
# 时间戳 → 格式化字符串
timestamp = 1697351445
formatted = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))
print(f"时间戳 {timestamp} 对应的时间是: {formatted}")
# 格式化字符串 → 时间戳
time_str = "2023-10-15 14:30:45"
time_tuple = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
timestamp = time.mktime(time_tuple)
print(f"时间字符串 '{time_str}' 对应的时间戳是: {timestamp}")
计算时间差
import time
def time_difference(start_time, end_time, format="%Y-%m-%d %H:%M:%S"):
"""计算两个时间字符串之间的时间差(秒)"""
start = time.mktime(time.strptime(start_time, format))
end = time.mktime(time.strptime(end_time, format))
return end - start
# 示例使用
start = "2023-10-15 09:00:00"
end = "2023-10-15 17:30:00"
diff_seconds = time_difference(start, end)
hours = diff_seconds / 3600
print(f"从 {start} 到 {end} 经过了 {diff_seconds:.0f} 秒")
print(f"相当于 {hours:.2f} 小时")
注意事项与最佳实践
时区处理: time模块默认使用本地时区。对于需要跨时区的应用,建议使用datetime模块配合pytz库。
性能考虑: 频繁的时间格式化/解析操作可能影响性能,在性能敏感场景中应谨慎使用。
格式化陷阱: 注意不同平台对某些格式指令(如%U和%W)的实现可能不同。
错误处理: 使用strptime时总是处理可能的ValueError异常:
try:
t = time.strptime(some_string, some_format)
except ValueError:
print("时间格式不匹配!")
总结
Python的time模块提供了强大的时间格式化功能:
- 使用
strftime
将时间元组转换为格式化的时间字符串 - 使用
strptime
将格式化的时间字符串解析为时间元组 - 掌握时间格式化符号是高效处理时间字符串的关键
- 结合
time.mktime
和time.localtime
可实现时间戳与格式化时间的互转
虽然time模块功能强大,但对于复杂的日期时间处理(如时区转换、日历操作等),建议结合使用datetime模块。
本文由MingYueMing于2025-08-09发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20257742.html
发表评论