我得到了一个格式为“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])
我还没有找到一种“更干净”的方式来做这件事。有吗?
当前回答
我还没有尝试过,但是pyiso8601承诺支持这一点。
其他回答
Isodate似乎有最完整的支持。
我更喜欢使用dateutil库进行时区处理和通常可靠的日期解析。如果您要得到一个ISO 8601字符串,例如:2010-05-08T23:41:54.000Z,那么使用strptime解析它会很有趣,特别是如果您事先不知道是否包含时区。pyiso8601有几个问题(检查他们的跟踪器),我在使用过程中遇到了,它已经几年没有更新了。相比之下,Dateutil一直很活跃,对我来说很有效:
from dateutil import parser
yourdate = parser.parse(datestring)
两种方法:
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'))
我还没有尝试过,但是pyiso8601承诺支持这一点。
各向异性8601应该处理这个问题。它还理解时区,Python 2和Python 3,并且它还合理地覆盖了ISO 8601的其余部分,如果你需要它的话。
import aniso8601
aniso8601.parse_datetime('2007-03-04T21:08:12')