我试图在Python中解析基本的iso格式化日期时间字符串,但我很难做到这一点。请考虑以下示例:
>>> import json
>>> from datetime import datetime, date
>>> import dateutil.parser
>>> date_handler = lambda obj: obj.isoformat()
>>> the_date = json.dumps(datetime.now(), default=date_handler)
>>> print the_date
"2017-02-18T22:14:09.915727"
>>> print dateutil.parser.parse(the_date)
Traceback (most recent call last):
File "<input>", line 1, in <module>
print dateutil.parser.parse(the_date)
File "/usr/local/lib/python2.7/site-packages/dateutil/parser.py", line 1168, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/usr/local/lib/python2.7/site-packages/dateutil/parser.py", line 559, in parse
raise ValueError("Unknown string format")
ValueError: Unknown string format
我还尝试使用常规strptime解析它:
>>> print datetime.strptime(the_date, '%Y-%m-%dT%H:%M:%S')
# removed rest of the error output
ValueError: time data '"2017-02-18T22:11:58.125703"' does not match format '%Y-%m-%dT%H:%M:%S'
>>> print datetime.strptime(the_date, '%Y-%m-%dT%H:%M:%S.%f')
# removed rest of the error output
ValueError: time data '"2017-02-18T22:11:58.125703"' does not match format '%Y-%m-%dT%H:%M:%S.%f'
有人知道我怎么能解析这个相当简单的日期时间格式?
答案 0 :(得分:6)
请注意错误消息:
ValueError: time data '"2017-02-18T22:11:58.125703"'
有单引号+双引号,这意味着该字符串实际上包含双引号。这是因为json
序列化为字符串添加了双引号。
您可能想要删除字符串周围的引号:
datetime.strptime(the_date.strip('"'), '%Y-%m-%dT%H:%M:%S.%f')
或者,可能不那么“hacky”,使用json.loads
反序列化:
datetime.strptime(json.loads(the_date), '%Y-%m-%dT%H:%M:%S.%f')