栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

等时格式的时区字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

等时格式的时区字段

问题是

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'



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650550.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号