Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移量) [英] Python UTC datetime object's ISO format doesn't include Z (Zulu or Zero offset)

查看:30
本文介绍了Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移量)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

与 JavaScript 不同,为什么 python 2.7 在 UTC datetime 对象的 isoformat 字符串末尾不包含 Z 字符(Zulu 或零偏移量)?

<预><代码>>>>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类 simple_utc(tzinfo):def tzname(self,**kwargs):返回UTC"def utcoffset(self, dt):返回时间增量(0)

然后您可以手动将时区信息添加到utcnow():

<预><代码>>>>datetime.utcnow().replace(tzinfo=simple_utc()).isoformat()'2014-05-16T22:51:53.015001+00:00'

请注意,这符合 ISO 8601 格式,该格式允许 Z+00:00 作为 UTC 的后缀.请注意,后者实际上更符合标准,时区通常是如何表示的(UTC 是一个特例.)

Why python 2.7 doesn't include Z character (Zulu or zero offset) at the end of UTC datetime object's isoformat string unlike JavaScript?

>>> datetime.datetime.utcnow().isoformat()
'2013-10-29T09:14:03.895210'

Whereas in javascript

>>>  console.log(new Date().toISOString()); 
2013-10-29T09:38:41.341Z

解决方案

Python datetime objects don't have time zone info by default, and without it, Python actually violates the ISO 8601 specification (if no time zone info is given, assumed to be local time). You can use the pytz package to get some default time zones, or directly subclass tzinfo yourself:

from datetime import datetime, tzinfo, timedelta
class simple_utc(tzinfo):
    def tzname(self,**kwargs):
        return "UTC"
    def utcoffset(self, dt):
        return timedelta(0)

Then you can manually add the time zone info to utcnow():

>>> datetime.utcnow().replace(tzinfo=simple_utc()).isoformat()
'2014-05-16T22:51:53.015001+00:00'

Note that this DOES conform to the ISO 8601 format, which allows for either Z or +00:00 as the suffix for UTC. Note that the latter actually conforms to the standard better, with how time zones are represented in general (UTC is a special case.)

这篇关于Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移量)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆