如何在Python格式化的本地时间字符串中显示时区名称?
解决Python datetime无法显示时区名称的问题
这个问题我之前也踩过坑!你用datetime.now()生成的是naive datetime对象——它没有携带任何时区信息,所以strftime('%Z')自然没法输出时区名称啦。要显示CET这类时区标识,得让datetime对象带上时区信息才行,下面分版本给你两种可行方案:
方案一:Python 3.9+ 用内置zoneinfo模块(推荐)
Python 3.9之后内置了zoneinfo模块,不需要额外安装依赖,直接调用系统本地时区即可:
from datetime import datetime from zoneinfo import ZoneInfo # 获取带本地时区的当前时间 current_time = datetime.now(ZoneInfo('local')) # 格式化输出目标字符串 print(current_time.strftime('%d %b %Y %H:%M:%S %Z'))
运行后就能得到你想要的09 Apr 2019 13:23:52 CET这类输出啦。
方案二:Python 3.9以下 用pytz库
如果你的Python版本比较旧,需要先安装第三方时区库pytz:
pip install pytz
然后用以下代码实现需求:
from datetime import datetime import pytz # 获取本地时区(也可以直接指定'Europe/Paris'这类具体时区) local_tz = pytz.localzone() # 生成带时区信息的当前时间 current_time = datetime.now(local_tz) # 格式化输出 print(current_time.strftime('%d %b %Y %H:%M:%S %Z'))
补充说明
为什么原来的代码失效?因为datetime.now()返回的对象没有tzinfo属性,%Z格式化符只有在datetime对象包含合法时区信息时,才会输出对应的时区名称。只要给datetime对象绑定正确的时区属性,%Z就能正常工作了。
内容的提问来源于stack exchange,提问作者mrgou
相关产品推荐
相关产品推荐

