我编写了一个使用 time 模块中的 strftime() 的 python 脚本。在我的 Windows 10 计算机上,当我调用 strftime("%Z") 时,我会得到时区的长格式,并且我想缩写它。我可以在脚本中通过解析第一个字母并连接它们来做到这一点,但如果我可以更改系统显示时区的方式,我不想浪费时间这样做。换句话说,如果我打电话
startup = strftime("This session began on %a - %x at %X %Z)
我不想让它输出:
“本次会议于 2024 年 8 月 23 日星期五太平洋夏令时间 10:30:10 开始”
我想要它输出
“本次会议于 2024 年 8 月 23 日周五 10:30:10 PDT 开始”
无需进行 re.sub 或 re.findall
我查看了 Windows 10 控制面板,但找不到任何管理时区标记格式的内容。但说实话,导航这些菜单就像一个迷宫,我猜它一定在某个地方,我只需要精通 Windows 的人告诉我在哪里。
我编写了一些小算法来捕获长格式的第一个字母并将它们连接成缩写。但如果我可以通过系统设置更轻松地完成计算,我不喜欢浪费计算时间。
您要查找的是缩写,例如 IANA 时区数据库 使用的缩写。请注意,Windows 不使用此数据库,因此可能很难通过
strftime
访问这些缩写(仅限于特定于平台的功能)。
但是,您可以使用 zoneinfo 时区对象来解决此问题,这反过来又允许 strftime 显示所需的缩写。不过,您必须使用第三方库。
from datetime import datetime
import tzlocal # pip install tzlocal
localzone = tzlocal.get_localzone() # "Europe/Berlin" on my machine
now = datetime.now(localzone)
print(now.strftime("%Z")) # "CEST" on 2024-08-26
print(now.tzinfo.key) # IANA tz database identifier