我得到了一个格式为“2009-05-28T16:15:00”的日期时间字符串(我相信这是ISO 8601)。一个比较黑的选项似乎是使用时间来解析字符串。Strptime并将元组的前六个元素传递给datetime构造函数,例如:

datetime.datetime(*time.strptime("2007-03-04T21:08:12", "%Y-%m-%dT%H:%M:%S")[:6])

我还没有找到一种“更干净”的方式来做这件事。有吗?


当前回答

我更喜欢使用dateutil库进行时区处理和通常可靠的日期解析。如果您要得到一个ISO 8601字符串,例如:2010-05-08T23:41:54.000Z,那么使用strptime解析它会很有趣,特别是如果您事先不知道是否包含时区。pyiso8601有几个问题(检查他们的跟踪器),我在使用过程中遇到了,它已经几年没有更新了。相比之下,Dateutil一直很活跃,对我来说很有效:

from dateutil import parser
yourdate = parser.parse(datestring)

其他回答

Arrow看起来很有希望:

>>> import arrow
>>> arrow.get('2014-11-13T14:53:18.694072+00:00').datetime
datetime.datetime(2014, 11, 13, 14, 53, 18, 694072, tzinfo=tzoffset(None, 0))

Arrow是一个Python库,提供了一种明智、智能的方式来创建、操作、格式化和转换日期和时间。Arrow简单,轻量级,受到moment.js和请求的启发。

各向异性8601应该处理这个问题。它还理解时区,Python 2和Python 3,并且它还合理地覆盖了ISO 8601的其余部分,如果你需要它的话。

import aniso8601
aniso8601.parse_datetime('2007-03-04T21:08:12')

我还没有尝试过,但是pyiso8601承诺支持这一点。

Isodate似乎有最完整的支持。

两种方法:

Epoch到ISO时间:

isoTime = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(epochTime))

ISO时间到纪元:

epochTime = time.mktime(time.strptime(isoTime, '%Y-%m-%dT%H:%M:%SZ'))