2012-02-24 40 views
11

Tôi đang sử dụng API Paypal và tôi lấy lại dấu thời gian theo định dạng sau. Nó cố gắng phân tích này cho một đối tượng datetime sử dụng strptime, nhưng tôi nhận được lỗi sau:Chuyển đổi chuỗi thời gian utc thành đối tượng ngày giờ

(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 

Ngoài ra, như định dạng này được coi là một định dạng khá chuẩn không có một chức năng có sẵn cho việc này?

EDIT:

Ok có vẻ là lỗi đánh máy. Đầu tiên% M phải là% m

Trả lời

7

Có vẻ như bạn đang trộn %M (phút) và %m (tháng).

2

Vấn đề là bạn sử dụng %M hai lần. Sử dụng %m cho các tháng:

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

Tại sao tôi nên sử dụng thời gian? Làm cho tinh thần sử dụng datetime ở đây phải không? Vì đây là cả ngày và giờ. –

+0

@arno_v: Tôi hiểu, bạn đang sử dụng phương thức lớp 'datetime.strptime'. Xin lỗi vì điều đó. –

2

Bạn có lỗi đánh máy. %M được sử dụng hai lần. Bạn có nghĩa là sử dụng %m cho tháng. Từ số docs:

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

Trình phân tích cú pháp từ dateutil là bạn của bạn.

Bạn sẽ phải cài đặt pip dateutil nhưng bạn đã tiết kiệm vải và túi xách của mã chuyển đổi ngày:

pip install python-dateutil 

Bạn có thể sử dụng nó như thế này.

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

Bạn sẽ tìm thấy bạn có thể đối phó với hầu như bất kỳ định dạng chuỗi ngày với phân tích cú pháp này và bạn sẽ có được một ngày python chuẩn đẹp lại

+0

Ah cảm ơn! Kể từ khi tôi đã sử dụng dateutil trong dự án này, điều này có vẻ là cách thanh lịch nhất để làm điều đó. –

+0

Vui lòng bỏ phiếu và thay đổi câu trả lời này thành câu trả lời của bạn rồi vui lòng @arno_v –

Các vấn đề liên quan