【问题标题】:pytz returns LMT timezone instead of GMT when pytz.timezone() passed to tzinfo当 pytz.timezone() 传递给 tzinfo 时,pytz 返回 LMT 时区而不是 GMT
【发布时间】:2021-09-14 23:05:45
【问题描述】:
from datetime import datetime
from pytz import timezone
d1 = datetime.now(tz = timezone('Asia/Calcutta'))
d2 = datetime(2019,12,12,12,12,12,12)
zone = timezone('Asia/Calcutta')
d2 = zone.localize(d2)
d3 = datetime(2019,12,12,12,12,12,12,tzinfo = timezone('Asia/Calcutta'))
print(d1,d1.tzinfo.tzname)
print(d2,d2.tzinfo.tzname)
print(d3,d3.tzinfo.tzname)

这是我得到的输出

2021-07-03 14:00:03.135000+05:30 <bound method DstTzInfo.tzname of <DstTzInfo 'Asia/Calcutta' IST+5:30:00 STD>>
2019-12-12 12:12:12.000012+05:30 <bound method DstTzInfo.tzname of <DstTzInfo 'Asia/Calcutta' IST+5:30:00 STD>>
2019-12-12 12:12:12.000012+05:53 <bound method DstTzInfo.tzname of <DstTzInfo 'Asia/Calcutta' LMT+5:53:00 STD>>

只需查看时区,正如我在最后一个 d3 对象中尝试使用 tzinfo 传递时区时从输出中看到的那样,它给了我 LMT+5:53 而不是 +5:30 ,但第一个两个日期对象工作正常,帮帮我

【问题讨论】:

  • 请做一些研究,这是一个众所周知的问题,您不能将 pytz 时区对象直接设置为 tzinfo。此外,如果您可以使用 Python 3.9 或更高版本,那么您一开始就不应该使用 pytz。使用zoneinfo。没有这样的担心。

标签: python datetime timezone pytz


【解决方案1】:

请参考https://pythonhosted.org/pytz/ 有人提到 '不幸的是,在许多时区使用标准日期时间构造函数的 tzinfo 参数''不起作用''。'

和 “处理时间的首选方式是始终以 UTC 工作,仅在生成供人类阅读的输出时转换为本地时间。”

抱歉,我无法理解您的代码背后的意图。从我的想法来看,也许这就是你想要的。

` 从日期时间导入日期时间 导入pytz

d1 = datetime.utcnow() # d1 is naive
d2 = datetime(2019,12,12,12,12,12,12) # d2 too
zone = pytz.timezone('Asia/Calcutta')  
d2 = zone.localize(d2) # d2 has become aware now
d3  = datetime(2019,12,12,12,12,12,12,tzinfo = pytz.utc)

print(d1)
print(d2,d2.tzinfo.tzname(d2))
print(d3,d3.tzinfo.tzname(d3))

` 输出是 2021-07-20 07:07:22.542644 2019-12-12 12:12:12.000012+05:30 IST 2019-12-12 12:12:12.000012+00:00 UTC

使用 zoneinfo 模块(python 3.9)的相同代码,在构造函数中提供 tzinfo 没有限制。 (zoneinfo module)

from datetime import datetime
from zoneinfo import *

d1 = datetime.utcnow() 
d2 = datetime(2019,12,12,12,12,12,12,tzinfo= ZoneInfo('Asia/Calcutta'))
d3  = datetime(2019,12,12,12,12,12,12,tzinfo = ZoneInfo('utc'))
print(d1)
print(d2,d2.tzinfo.tzname(d2))
print(d3,d3.tzinfo.tzname(d3))

输出是 2021-07-20 07:13:52.749333 2019-12-12 12:12:12.000012+05:30 IST 2019-12-12 12:12:12.000012+00:00 UTC

希望这是有用的。

致以最诚挚的问候

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 2019-12-29
    • 2015-07-30
    • 1970-01-01
    • 2013-03-29
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多