如何无需字符串操作打印带冒号时区偏移的Python datetime?
问题
我创建了如下datetime对象:
dt = datetime(2023, 9, 18, 22, 30, 0, tzinfo=timezone(timedelta(hours=9)))
该对象对应2023年9月18日22:30(JST),我希望将其格式化为:
2023-09-18 22:30:00+09:00
我尝试了以下两种方式:
dt.strftime("%Y-%m-%d %H:%M:%S%Z") # 2023-09-18 22:30:00UTC+09:00 dt.strftime("%Y-%m-%d %H:%M:%S%z") # 2023-09-18 22:30:00+0900
这两种输出均不符合需求,要么需移除第一种结果中的UTC,要么需给第二种结果的时区偏移添加冒号。请问是否存在无需字符串操作即可得到目标格式的方法?
解决方法
有两种无需手动字符串处理的可行方案:
方案1:使用datetime.isoformat()方法
Python的datetime对象自带的isoformat()方法可以直接输出符合要求的格式,默认时间和日期的分隔符是T,通过sep参数可以改成空格:
dt.isoformat(sep=' ') # 输出结果:'2023-09-18 22:30:00+09:00'
这个方法会自动处理时区偏移的冒号,完全匹配你的格式需求,且无需额外依赖。
方案2:使用第三方库arrow(可选)
如果日常需要频繁处理复杂日期时间格式,可以用arrow库简化操作,直接指定格式即可得到目标输出:
import arrow arw = arrow.get(dt) arw.format('YYYY-MM-DD HH:mm:ssZZ') # 输出结果:'2023-09-18 22:30:00+09:00'
注意这个方案需要额外安装arrow库,若不想引入外部依赖,方案1是最优选择。
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

