2017-02-18 100 views
0

我想解析一个基本的iso格式的日期时间字符串在Python中,但我很难做到这一点。请看下面的例子:ValueError:Python中的未知字符串格式?

>>> 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

你为什么用'json.dumps '在上面?如果您有JSON,请在解析日期之前解析它。 – Ryan

回答

6

记下错误消息:

ValueError: time data '"2017-02-18T22:11:58.125703"' 

有单引号+双引号,这意味着该字符串实际上包含双引号。这是因为json序列化会向字符串添加双引号。

你可能想要剥离周围的字符串引号:

datetime.strptime(the_date.strip('"'), '%Y-%m-%dT%H:%M:%S.%f') 

或者,也许更少 “哈克”,反序列化使用json.loads

datetime.strptime(json.loads(the_date), '%Y-%m-%dT%H:%M:%S.%f') 
+0

啊,我忽略了这一点。谢谢! – kramer65

+0

感谢您的支持:-) – trincot