gpt4 book ai didi

python - dateutil.parser.parse() 和丢失的时区信息

转载 作者:太空狗 更新时间:2023-10-30 00:20:04 25 4
gpt4 key购买 nike

我正在尝试 dateutil.parser.parse() 使用可识别时区的日期时间来解析默认的 str(datetime.datetime.now()) 输出。但是,parse() 似乎丢失了时区信息并将其替换为本地时间时区。以下是 IPython 输出:

In [1]: from django.utils.timezone import now
In [3]: import dateutil
In [4]: t = now()
In [6]: print t
2014-07-14 08:51:49.123342+00:00

In [7]: st = unicode(t)
In [8]: print dateutil.parser.parse(st)
2014-07-14 08:51:49.123342+02:00

据我所知,dateutil 在猜测日期格式时会进行一些试探,这里可能会出错。

  • 如何为解析时区感知日期时间提供准确的日期时间格式?

  • 更好 - 如果格式已知,如何仅使用 Python stdlib 解析此日期时间,而不依赖 dateutil?

最佳答案

timezone.now will give you an aware datetime object if USE_TZ is true .您不需要进一步解析它。

在此示例中,USE_TZ 为 True,时区设置为 UTC:

>>> from django.utils import timezone as djtz
>>> i = djtz.now()
>>> type(i)
<type 'datetime.datetime'>
>>> i.tzinfo
<UTC>

就 dateutil 而言,它将正确解析您的字符串:

>>> from dateutil.parser import parse
>>> s = '2014-07-14 08:51:49.123342+00:00'
>>> parse(s).tzinfo
tzutc()
>>> z = parse(s)
>>> z
datetime.datetime(2014, 7, 14, 8, 51, 49, 123342, tzinfo=tzutc())

您可以看到它选择了正确的时区(在本例中为 UTC)。

default format specifiers只接受 +0000 作为带 %z 的偏移量格式,或带 %Z 的三字母时区名称;但是你不能用它来解析,只能用来格式化:

>>> datetime.datetime.strptime('2014-07-14 08:51:49.123342+0000', '%Y-%m-%d %H:%M:%S.%f%z')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S.%f%z'
>>> datetime.datetime.strftime(z, '%Z')
'UTC'
>>> datetime.datetime.strftime(z, '%z')
'+0000'

关于python - dateutil.parser.parse() 和丢失的时区信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24732872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com