当前位置:首页 > Python > 正文

Python time模块时间格式化教程 - 详解strftime与strptime

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.mktimetime.localtime可实现时间戳与格式化时间的互转

虽然time模块功能强大,但对于复杂的日期时间处理(如时区转换、日历操作等),建议结合使用datetime模块。

发表评论