将日期时间字符串转换为正确的时区

时间:2017-12-06 20:37:35

标签: python datetime python-dateutil

我已经就这个主题进行了一些有用的讨论,但仍然不理解以下内容:

说,我有一个字符串“20080730 06:23:54 PDT”,我想将其转换为时区感知日期时间对象。我明白,dateutil.parser.parse()通常不会解析像“PDT”这样的时区,但看起来它确实解析了“UTC”和“EDT”。这些例外吗? “EDT”是个例外b / c它是我当地的时区吗?

import pytz
from dateutil.parser import parse
sdt="20080730 06:23:54 UTC"
dt_obj = parse(sdt)
dt_obj
datetime.datetime(2008, 7, 30, 6, 23, 54, tzinfo=tzutc())
sdt="20080730 06:23:54 EDT"
dt_obj = parse(sdt)
dt_obj
datetime.datetime(2008, 7, 30, 6, 23, 54, tzinfo=tzlocal())
sdt="20080730 06:23:54 PDT"
dt_obj = parse(sdt)
dt_obj
datetime.datetime(2008, 7, 30, 6, 23, 54)

2 个答案:

答案 0 :(得分:0)

作为一名飞行员,我认为你只需要了解更多关于时区的信息。它并不像你想象的那么容易,但也不是那么困难。工作/首先转换到UTC时间然后继续(也是你)总是更安全必须看到夏令时)。 如果要对许多输入/输出执行此操作,则需要数据库(Internet)和一些正则表达式(https://docs.python.org/3.6/howto/regex.html)。看看re-gex lib,也许是selenium来改进你的程序 对不起,要清除EDT代表东部夏令时(夏季)和东部标准时间(冬季)的东部时间.E.G。北美观察两者并将它们划分为领土

EDITED 来自http://pytz.sourceforge.net/ *

不幸的是,对于许多时区,使用标准日期时间构造函数的'tzinfo参数''与pytz不起作用。

问题&限制

UTC的偏移量四舍五入到最接近的整分钟,因此1937年之前的欧洲/阿姆斯特丹等时区将长达30秒。这是Python日期时间库的限制。 如果您认为时区定义不正确,我可能无法修复它。 pytz是Olson时区数据库的直接翻译,需要对此源进行时区定义的更改。如果您发现错误,应将其报告给时区邮件列表,并从http://www.iana.org/time-zones链接。

答案 1 :(得分:0)

在类似的情况下,我发现东部夏令时是一个例外:它通常可用/可解析与等效的标准时区名称一起,即使太平洋时间或其他时间不同也是如此。