Python UTCdate时间对象的ISO格式不包括Z(Zulu或零偏移量)
为什么python 2.7不包括Z字符(祖鲁语或零偏移)在UTC datetime对象的isoformatstring不像JavaScript?
>>> datetime.datetime.utcnow().isoformat() '2013-10-29T09:14:03.895210'
而在JavaScript中
>>> console.log(new Date().toISOString()); 2013-10-29T09:38:41.341Z
Python datetime
时间对象默认没有时区信息,如果没有它,Python实际上违反了ISO 8601规范( 如果没有给出时区信息,假定是本地时间 )。 您可以使用pytz包来获得一些默认的时区,或者直接自己的子类tzinfo
:
from datetime import datetime, tzinfo, timedelta class simple_utc(tzinfo): def tzname(self,**kwargs): return "UTC" def utcoffset(self, dt): return timedelta(0)
然后,您可以手动将时区信息添加到utcnow()
:
>>> datetime.utcnow().replace(tzinfo=simple_utc()).isoformat() '2014-05-16T22:51:53.015001+00:00'
请注意,这符合ISO 8601格式,它允许Z
或+00:00
作为UTC的后缀。 请注意,后者实际上更符合标准,时区通常如何表示(UTC是一种特殊情况)。
选项: isoformat()
Python的datetime
不支持军事时区后缀,如UTC的“Z”后缀。 下面这个简单的stringreplace就是这样的:
In [1]: import datetime In [2]: d = datetime.datetime(2014, 12, 10, 12, 0, 0) In [3]: str(d).replace('+00:00', 'Z') Out[3]: '2014-12-10 12:00:00Z'
str(d)
与d.isoformat(sep=' ')
基本相同
请参阅: Datetime,Python标准库
选项: strftime()
或者你可以使用strftime
来达到同样的效果:
In [4]: d.strftime('%Y-%m-%d %H:%M:%SZ') Out[4]: '2014-12-10 12:00:00Z'
注意:只有当您知道指定的date是UTC时,此选项才起作用。
附加:人类可读的时区
更进一步,你可能会感兴趣的是显示人类可读的时区信息, pytz
strftime
%Z
时区标志:
In [5]: import pytz In [6]: d = datetime.datetime(2014, 12, 10, 12, 0, 0, tzinfo=pytz.utc) In [7]: d Out[7]: datetime.datetime(2014, 12, 10, 12, 0, tzinfo=<UTC>) In [8]: d.strftime('%Y-%m-%d %H:%M:%S %Z') Out[8]: '2014-12-10 12:00:00 UTC'
Pythondate时间有点笨重。 使用arrow
。
> str(arrow.utcnow()) '2014-05-17T01:18:47.944126+00:00'
箭头与date时间基本相同,但时区和一些额外的细节应该在主库中。