如何根据 timezone name 获取 GMT 时区

2022-02-14 17:29:29 +08:00
 vegetableChick

假设时区名是 America/Halifax, 如何获取对应的 GMT格式

timezone = "America/Halifax"

# 输出  GMT-04:00

对时区这一块子不太熟悉, 求教! 感谢

2975 次点击
所在节点    Python
14 条回复
hsfzxjy
2022-02-14 17:45:26 +08:00
用 pytz
shylockhg
2022-02-14 17:47:56 +08:00
iana timezone database
julyclyde
2022-02-14 18:52:41 +08:00
这俩不是固定对应啊
oIMOo
2022-02-14 22:27:19 +08:00
@julyclyde 同一时区对应多个地区,但是一个地区仅对应一个时区呀~ 看楼主举的例子,是后者~
billgong
2022-02-15 00:00:02 +08:00
@oIMOo 楼上说的没错,确实是不对应。比如 Australia/Melbourne 因为有夏令时,UTC+10/UTC+11 都是对的

所以时区能用 tzdata 就用 tzdata ,需要计算时差的情况用库解决,不要直接算绝对值。

我就遇到个经典的例子,之前用某 SaaS 的 API 写 automation ,时区用 Australia/Melbourne 不行,非得 Australia/Sydney 否则报错(这俩地方现今都是 AEST/AEDT ,但历史上有细微差别),我估计就是他们用的某个 vendor lib 不兼容 tzdata ,其中有时区转译层导致的。
Livid
2022-02-15 00:04:17 +08:00
用 arrow 的 to 方法。

https://arrow.readthedocs.io/en/latest/
oIMOo
2022-02-15 00:26:02 +08:00
@billgong 确实,我之前也遇到过应用把时区写死,然后一切换时区,所有时间都错了…… 感谢提醒
vegetableChick
2022-02-15 12:00:03 +08:00
@billgong 感谢回复, 使用场景是给用户给账户设置时区, 但是需要给他展示选择 ( GMT-07:00)America/Dawson_Creek
这种格式
julyclyde
2022-02-15 12:16:44 +08:00
@oIMOo 一个地区时区也不是只对一个时差的
julyclyde
2022-02-15 12:17:03 +08:00
@vegetableChick 对用户来说只有地方时区是有意义的,GMT 时差没有意义
gadfly3173
2022-02-15 15:24:11 +08:00
@julyclyde #10 一般来说设置时区的 GUI 都是会显示选择地区的时差的吧
vegetableChick
2022-02-15 17:25:36 +08:00
@Livid 用这个包, 如果 `America/Los_Angeles` 现在是 `GMT-8` , 如果 3 月 23 再看就是 `GMT-7`吧?
Livid
2022-02-15 18:12:55 +08:00
@vegetableChick 它会帮你处理好时区之间的转换。你只需要用 to 就好。
billgong
2022-02-16 06:43:37 +08:00
@vegetableChick 楼上说的都没什么问题
https://pythonhosted.org/pytz/#localized-times-and-date-arithmetic
如果初始化为环境当前时间的话,提取出来的 UTC offset 应该是将夏令时考虑在内的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/833822

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX