我得到了一个格式为“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])
我还没有找到一种“更干净”的方式来做这件事。有吗?
我得到了一个格式为“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)
其他回答
Isodate似乎有最完整的支持。
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和请求的启发。
我还没有尝试过,但是pyiso8601承诺支持这一点。
由于Python 3.7并且没有外部库,您可以使用datetime模块中的fromisoformat函数:
datetime.datetime.fromisoformat('2019-01-04T16:41:24+02:00')
Python 2不支持%z格式说明符,所以如果可能的话,最好在所有地方显式使用Zulu时间:
datetime.datetime.strptime("2007-03-04T21:08:12Z", "%Y-%m-%dT%H:%M:%SZ")
两种方法:
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'))