2012-02-24 112 views
11

我正在使用PayPal API,并以以下格式取回时间戳。它尝试解析此使用strptime DateTime对象,但我得到了以下错误:将utc时间字符串转换为datetime对象

(Pdb) datetime.strptime('2012-03-01T10:00:00Z','%Y-%M-%dT%H:%M:%SZ') 
*** error: redefinition of group name 'M' as group 5; was group 2 

而且,这种格式应该是相当标准的格式是不存在适用于这样的功能?

编辑:

好吧似乎是一个错字。首先%M应该是%m

回答

7

看起来像是在混合%M(分钟)和%m(月)。

2

问题是您使用%M两次。在几个月内使用%m

>>> datetime.strptime('2012-03-01T10:00:00Z','%Y-%m-%dT%H:%M:%SZ') 
datetime.datetime(2012, 3, 1, 10, 0) 
+0

为什么要使用时间?在这里使用datetime是否合适?既然这既是日期又是时间。 – 2012-02-24 16:10:27

+0

@arno_v:我明白了,您正在使用类方法'datetime.strptime'。对于那个很抱歉。 – 2012-02-24 16:13:14

2

您有一个错字。 %M使用了两次。你打算在本月使用%m。来自docs

%m Month as a decimal number [01,12]. 
%M Minute as a decimal number [00,59]. 
21

从dateutil的解析器是你的朋友。

你必须点子安装dateutil但你保存的日期转换代码布袋:

pip install python-dateutil 

您可以使用它像这样。

from dateutil import parser 
ds = '2012-03-01T10:00:00Z' # or any date sting of differing formats. 
date = parser.parse(ds) 

你会发现你可以处理几乎任何日期字符串格式与此解析器,你会得到一个很好的标准Python追溯到

+0

啊谢谢!由于我已经在这个项目中使用了dateutil,这似乎是最优雅的方式。 – 2012-02-25 13:43:38

+0

请投票并将其更改为您的最喜欢答案,然后请@arno_v – 2012-02-25 14:10:50

相关问题