Python time strftime() 方法(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 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" |
%H | 24 小时制小时(00-23) | "15" |
%M | 分钟(00-59) | "00" |
%S | 秒(00-60,允许闰秒) | "00" |
%A | 完整星期名称(如 Monday) | "Friday" |
%B | 完整月份名称(如 January) | "June" |
%y | 两位数年份(如 24) | "24" |
%I | 12 小时制小时(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日"
总结:掌握时间格式化的关键
通过本文的学习,读者应能:
- 理解
strftime()
的基本语法和核心作用; - 熟练使用格式代码构建多样化的时间字符串;
- 解决常见问题并优化代码的灵活性。
时间处理是编程中高频且易错的场景,但通过 strftime()
的系统化学习,开发者可以高效地将时间数据转化为用户友好的信息。无论是日志记录、数据清洗,还是用户界面显示,这一方法都能成为你的得力工具。
实践建议:
- 尝试将代码示例复制到本地环境运行,观察输出结果;
- 根据实际项目需求,设计并实现自定义的时间格式。
通过不断练习,你将彻底掌握 Python 时间格式化的精髓!