V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
vegetableChick
V2EX  ›  Python

如何根据 timezone name 获取 GMT 时区

  •  
  •   vegetableChick · 2022-02-14 17:29:29 +08:00 · 3220 次点击
    这是一个创建于 1045 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    timezone = "America/Halifax"
    
    # 输出  GMT-04:00
    
    

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

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

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

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

    https://arrow.readthedocs.io/en/latest/
    oIMOo
        7
    oIMOo  
       2022-02-15 00:26:02 +08:00
    @billgong 确实,我之前也遇到过应用把时区写死,然后一切换时区,所有时间都错了…… 感谢提醒
    vegetableChick
        8
    vegetableChick  
    OP
       2022-02-15 12:00:03 +08:00
    @billgong 感谢回复, 使用场景是给用户给账户设置时区, 但是需要给他展示选择 ( GMT-07:00)America/Dawson_Creek
    这种格式
    julyclyde
        9
    julyclyde  
       2022-02-15 12:16:44 +08:00
    @oIMOo 一个地区时区也不是只对一个时差的
    julyclyde
        10
    julyclyde  
       2022-02-15 12:17:03 +08:00
    @vegetableChick 对用户来说只有地方时区是有意义的,GMT 时差没有意义
    gadfly3173
        11
    gadfly3173  
       2022-02-15 15:24:11 +08:00
    @julyclyde #10 一般来说设置时区的 GUI 都是会显示选择地区的时差的吧
    vegetableChick
        12
    vegetableChick  
    OP
       2022-02-15 17:25:36 +08:00
    @Livid 用这个包, 如果 `America/Los_Angeles` 现在是 `GMT-8` , 如果 3 月 23 再看就是 `GMT-7`吧?
    Livid
        13
    Livid  
    MOD
       2022-02-15 18:12:55 +08:00
    @vegetableChick 它会帮你处理好时区之间的转换。你只需要用 to 就好。
    billgong
        14
    billgong  
       2022-02-16 06:43:37 +08:00
    @vegetableChick 楼上说的都没什么问题
    https://pythonhosted.org/pytz/#localized-times-and-date-arithmetic
    如果初始化为环境当前时间的话,提取出来的 UTC offset 应该是将夏令时考虑在内的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1533 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:06 · PVG 01:06 · LAX 09:06 · JFK 12:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.