如何将Python的.isoformat()字符串转换回datetime对象

参见英文答案 > Convert timestamps with offset to datetime obj using strptime                                    4个
>            How do I parse an ISO 8601-formatted date?                                    25个
因此在Python 3中,您可以使用.isoformat()生成ISO 8601日期,但是您无法将isoformat()创建的字符串转换回datetime对象,因为Python自己的日期时间指令不能正确匹配.也就是说,%z = 0500而不是05:00(由.isoformat()生成).

例如:

>>> strDate = d.isoformat()
>>> strDate
'2015-02-04T20:55:08.914461+00:00'

>>> objDate = datetime.strptime(strDate,"%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\Lib\_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\Python34\Lib\_strptime.py", line 337, in _strptime
    (data_string, format))
ValueError: time data '2015-02-04T20:55:08.914461+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

来自Python的strptime文档:(https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior)

%z UTC offset in the form +HHMM or -HHMM (empty string if the the
object is naive). (empty), +0000, -0400, +1030

因此,简而言之,Python甚至不遵守自己的字符串格式化指令.

我知道日期时间在Python中已经很糟糕了,但这真的超出了不合理的范围,进入了愚蠢的土地.

告诉我这不是真的.

解决方法:

事实证明,这是目前这个问题的最佳“解决方案”:

pip install python-dateutil

然后…

import datetime
import dateutil.parser

def getDateTimeFromISO8601String(s):
    d = dateutil.parser.parse(s)
    return d
上一篇:常用的一些GIS知识概念


下一篇:java – ISO 8601中的时间戳 – 最后6位yyyy-MM-dd’T’HH:mm:ss.?