等时格式的时区字段

等时格式的时区字段,第1张

等时格式的时区字段

问题是

pytz

…不同于已记录的tzinfo实现的Python API;如果要创建本地时间,则需要使用本

localize()
文档中介绍的方法…

再往下走,它说:

不幸的是,在许多时区中,使用标准datetime构造函数的tzinfo参数对pytz都不起作用。

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)'2002-10-27 12:00:00 LMT+0020'

因此,您需要按照文档的建议进行 *** 作-使用

normalize
,构造UTC时间和使用
astimezone
,等等。要选择哪一个取决于您要执行的 *** 作。例如:

>>> from datetime import datetime>>> from pytz import timezone>>> utc = timezone('UTC')>>> eastern = timezone('US/Eastern')>>> datetime(2014, 10, 6, 18, tzinfo=eastern).isoformat()'2014-10-06T18:00:00-04:56'>>> eastern.normalize(datetime(2014, 10, 6, 18, tzinfo=eastern)).isoformat()'2014-10-06T18:56:00-04:00'>>> datetime(2014, 10, 6, 18, tzinfo=utc).astimezone(eastern).isoformat()'2014-10-06T14:00:00-04:00'>>> eastern.localize(datetime(2014, 10, 6, 18)).isoformat()'2014-10-06T18:00:00-04:00'

我想这是你想要的最后一个。正如文档

localize
所说:

将天真的时间转换为本地时间。

此方法应用于构造本地时间,而不是将tzinfo参数传递给datetime构造函数。

我认为构建本地时间正是您想要的。


如果您想知道 为什么 ……那么,如果您查看一下奥尔森数据库中的数据,或者只是打印出

eastern._utcoffset
,您将看到-1天,+
68640分钟。那是19.0166+小时,而不是19小时。为什么?因为每个时区都以其起始偏移量进行定义,并从那里进行调整。东部地区基于1883年11月18日纽约时区,当时是格林尼治标准时间-04:56:02。从1920年开始对日期进行了调整,减去了额外的00:03:58。当然,DST的年度调整来回一小时。因此,截至目前,东部地区是-04:00,但不知道它应该代表什么日期,所以是-04:56。而且,因为
datetime
只要求时区提供其偏移量,而不是在特定时间获取其偏移量,这就是它所得到的。


最后一件事:EST是东部标准时间,它是-05:00。那不是2014年10月6日在美国任何位置的时区,因为在2014年,美国的夏令时为11月2日。(印第安纳州曾经有一些县在夏季在EST上,但现在已经不存在了。)您要查找的是EDT,即东部夏令时,-04:00。或者,当然是ET,它是夏季的EDT,而冬季是EST,这是您通过查找

'US/Eastern'
或得到的结果
'America/New_York'



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5652696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存