Mik*_*maa 6 python django datetime python-2.7 python-dateutil
我试图使用时区感知日期时间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
Run Code Online (Sandbox Code Playgroud)
据我dateutil
所知,在猜测日期格式时会有一些遗传因素,这里可能会出错.
如何为解析时区感知日期时间提供准确的日期时间格式?
更好的 - 如果知道格式如何只使用Python stdlib解析这个日期时间,而没有dateutil依赖?
Bur*_*lid -3
timezone.now
USE_TZ
如果为 true ,将为您提供一个已知的日期时间对象。您不需要进一步解析它。
在此示例中,USE_TZ 为 True,时区设置为 UTC:
>>> from django.utils import timezone as djtz
>>> i = djtz.now()
>>> type(i)
<type 'datetime.datetime'>
>>> i.tzinfo
<UTC>
Run Code Online (Sandbox Code Playgroud)
就 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())
Run Code Online (Sandbox Code Playgroud)
您可以看到它选择了正确的时区(在本例中为 UTC)。
默认格式说明符仅接受 +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'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8755 次 |
最近记录: |