当前位置: 首页 > 面试题库 >

Python astimezone()意外结果

施梓
2023-03-14
问题内容

给定一个变量,该变量包含巴黎时区的日期时间2000-01-01 00:01(冬季afaik中为UTC + 2):

datetime.datetime(2000, 1, 1, 0, 1, tzinfo=pytz.timezone('Europe/Paris'))

我希望转换为UTC会导致日期时间为1999-12-31 22:01,但是却得到了:

datetime.datetime(2000, 1, 1, 0, 1, tzinfo=pytz.timezone('Europe/Paris')).astimezone(pytz.utc)
datetime.datetime(1999, 12, 31, 23, 52, tzinfo=<UTC>)

我想念什么?

谢谢


问题答案:

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

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

但是对于没有夏令时转换的时区来说是安全的,例如UTC:

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt)
'2002-10-27 12:00:00 UTC+0000'

您会注意到:

>>> datetime.datetime(2000, 1, 1, 0, 1, tzinfo=pytz.timezone('Europe/Paris'))
datetime.datetime(2000, 1, 1, 0, 1, tzinfo=<DstTzInfo 'Europe/Paris' LMT+0:09:00 STD>)

“ LMT + 0:09:00 STD”…?! 那是历史的偏移,不是当前的标准。

pytz不能正确处理传回的时区捆绑包(包含永远的所有历史偏移量)datetime,它选择一些随机的(可能是 第一个
可能的)偏移量,而不是与实际时间相关的偏移量。可以说,由于它需要首先正确地解释时间,因此不能从时区束中选择正确的时间偏移。

该库仅支持构建本地时间的两种方式。第一种是使用库localize()提供的方法pytz。这用于本地化天真datetimedatetime没有时区信息):

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print(loc_dt.strftime(fmt))
2002-10-27 06:00:00 EST-0500

建立本地化时间的第二种方法是使用标准astimezone()方法转换现有的本地化时间:

>>> ams_dt = loc_dt.astimezone(amsterdam)
>>> ams_dt.strftime(fmt)
'2002-10-27 12:00:00 CET+0100'

http://pytz.sourceforge.net



 类似资料:
  • 我有以下代码: 为什么它会打印Java流?

  • 我有以下代码,它将标记字符串以创建对象列表: 我预期的输出是 1#、#Jon#、#176 2#、#Jack#、#200 3#、#Jimmy#、#160 如果我把内部分界线更改为类似的东西,它会正常工作为什么会发生这种行为?

  • 在我看来,我的缓冲区包含关于最后一个数据包步骤(路由器->my home)的信息,这些信息解释了为什么TTL值是254以及为什么我用Traceroute找到了相同的两个IP: $>traceroute qwant.com traceroute to qwant.com(194.187.168.99),30跳最大,60字节数据包 172.17.0.1(172.17.0.1)0.026 ms 0.01

  • 问题内容: 我正在使用arange函数来定义for循环迭代并获得意外结果。 满足以下条件: 仍使用8.35的停止值,如下所示 产生以下 但是我希望我的射程结束于8.35!我知道我可以使用> 8.35和<8.4的止损值来获得我的结果,但是为什么它与众不同并且在我看来不一致? 编辑:我正在使用2.7版 问题答案: 也许这与浮点数的限制有关。由于机器的精度,不可能将所有可能的值完美地存储为浮点数。例如:

  • 问题内容: 我的XML看起来像这样- 我正在使用以下代码进行处理- 它输出为- 我的问题是为什么“孩子数量是”分别为5和3?我不应该分别期望2和1吗?因为第一个对象具有“ 和”,第二个对象仅具有“ ” 本质上,我的意图是处理“对象”的子级。 问题答案: 那是因为每个子节点之间有2 ()。 以下内容包括文本节点及其相应的值。 可以通过修改代码来验证: 输出: 其中,3 = 和1 = 。

  • 问题内容: 我对来自JQuery Ajax请求的Internet Explorer缓存结果存在严重问题。 我的网页上有标题,每次用户导航到新页面时标题都会更新。页面加载后,我就执行此操作 它只是将标头信息注入页面。您可以通过访问www.wikipediamaze.com进行检查,然后登录并开始创建新拼图。 在我测试过的每种浏览器(谷歌浏览器,Firefox,Safari,Internet Expl