Python time strftime() 方法(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在编程中,日期和时间的处理是一项基础但关键的技能。无论是记录日志、生成报告,还是处理用户输入的时间数据,都需要将时间信息以清晰、可读的格式呈现。在 Python 中,time 模块的 strftime() 方法是实现这一目标的核心工具。本文将从零开始,逐步解析 strftime() 的工作原理、格式代码的使用技巧,以及如何通过实际案例掌握这一方法的精髓。


基础概念:时间与格式化的关系

在计算机系统中,时间通常以“时间戳”(timestamp)的形式存储,例如 1717020800 表示自 1970 年 1 月 1 日以来的秒数。然而,人类更习惯阅读类似 2024-06-01 15:00:00 的格式。strftime() 的作用,就是将时间元组(time tuple)转换为符合指定格式的字符串。

核心函数:time.strftime()

该方法的基本语法如下:

time.strftime(format, tuple)  
  • format:包含格式代码的字符串,例如 "%Y-%m-%d %H:%M:%S"
  • tuple:由 time.localtime()time.gmtime() 生成的时间元组。

示例:获取当前时间的字符串表示

import time  
current_time = time.localtime()  
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", current_time)  
print(formatted_time)  # 输出类似 "2024-06-01 15:00:00"  

格式代码详解:构建时间字符串的“积木”

strftime() 的强大之处在于其支持的格式代码。每个代码(如 %Y%m)对应时间的某一组成部分,开发者可以通过组合这些代码,灵活生成所需的格式。

以下表格列出了最常用的格式代码:

格式代码说明示例输出
%Y四位数年份(如 2024)"2024"
%m月份(01-12)"06"
%d日期(01-31)"01"
%H24 小时制小时(00-23)"15"
%M分钟(00-59)"00"
%S秒(00-60,允许闰秒)"00"
%A完整星期名称(如 Monday)"Friday"
%B完整月份名称(如 January)"June"
%y两位数年份(如 24)"24"
%I12 小时制小时(01-12)"03"
%p上午/下午(AM/PM)"PM"

格式代码的组合逻辑

将这些代码组合起来,可以生成各种格式。例如:

  • "%Y-%m-%d" → "2024-06-01"(ISO 8601 标准日期格式)
  • "%d %B %Y" → "01 June 2024"(自然语言日期表达)
  • "%H:%M:%S %p" → "15:00:00 PM"(带上午/下午的时间)

比喻
可以将格式代码想象成乐高积木,每个代码块代表时间的一个部分。通过排列组合这些“积木”,就能搭建出符合需求的时间字符串。例如,%Y-%m-%d 就像把年、月、日三块积木用连字符连接起来。


实战案例:常见场景的应用

案例 1:生成日志文件名

假设需要根据当前时间创建日志文件名,格式为 log_YYYY-MM-DD_HHMMSS.log

log_filename = time.strftime("log_%Y-%m-%d_%H%M%S.log")  
print(log_filename)  # 输出 "log_2024-06-01_150000.log"  

案例 2:显示友好的日期信息

为用户提供可读的日期描述,例如:“今天是星期五,2024年6月1日”:

friendly_date = time.strftime("今天是%A,%Y年%B%d日")  
print(friendly_date)  # 输出 "今天是Friday,2024年June01日"  

案例 3:处理不同时间格式的兼容性

某些系统可能要求时间字符串为 DD-MMM-YYYY(如 01-Jun-2024):

custom_format = time.strftime("%d-%b-%Y")  
print(custom_format)  # 输出 "01-Jun-2024"  

常见问题与解决方案

问题 1:格式代码无效导致的错误

如果使用了未定义的格式代码(例如 %XYZ),程序会抛出 ValueError
解决方案

  • 参考官方文档或格式代码表,确认代码的正确性。
  • 使用调试工具逐步检查代码中的每个字符。

问题 2:时区差异导致的时间显示不一致

默认情况下,time.localtime() 使用本地时区,而 time.gmtime() 使用 UTC 时区。
示例

utc_time = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())  
print("UTC 时间:", utc_time)  

问题 3:如何获取指定时间的格式化字符串?

若需处理非当前时间,可先通过 time.mktime() 或其他方法生成时间元组。
示例

import time  
timestamp = 1717020800  
custom_tuple = time.localtime(timestamp)  
formatted_time = time.strftime("%Y-%m-%d", custom_tuple)  
print(formatted_time)  # 输出 "2024-06-01"  

进阶技巧:扩展时间格式化的灵活性

技巧 1:结合 datetime 模块

datetime 模块的 strftime() 方法与 time 模块的功能类似,但更易于操作。例如:

from datetime import datetime  
current_datetime = datetime.now()  
formatted_date = current_datetime.strftime("%Y/%m/%d %I:%M %p")  
print(formatted_date)  # 输出 "2024/06/01 03:00 PM"  

技巧 2:自定义格式的扩展性

通过组合格式代码和字符串运算,可以生成复杂格式。例如:

iso_time = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())  

技巧 3:处理多语言日期

通过修改系统区域设置,可以生成不同语言的星期和月份名称。例如,设置为中文环境后:

zh_date = time.strftime("%Y年%m月%d日", time.localtime())  
print(zh_date)  # 输出 "2024年6月1日"  

总结:掌握时间格式化的关键

通过本文的学习,读者应能:

  1. 理解 strftime() 的基本语法和核心作用;
  2. 熟练使用格式代码构建多样化的时间字符串;
  3. 解决常见问题并优化代码的灵活性。

时间处理是编程中高频且易错的场景,但通过 strftime() 的系统化学习,开发者可以高效地将时间数据转化为用户友好的信息。无论是日志记录、数据清洗,还是用户界面显示,这一方法都能成为你的得力工具。

实践建议

  • 尝试将代码示例复制到本地环境运行,观察输出结果;
  • 根据实际项目需求,设计并实现自定义的时间格式。

通过不断练习,你将彻底掌握 Python 时间格式化的精髓!

最新发布