2010-10-25 41 views
9

Tôi muốn chuyển đổi chuỗi này vào một đối tượng datetime:chuyển đổi chuỗi để đối tượng datetime

Wed Oct 20 16:35:44 +0000 2010 

Có một cách đơn giản để làm điều này? Hay tôi phải viết RE để phân tích các phần tử, chuyển đổi từ 10 đến 10 và tiếp theo?

CHỈNH SỬA: strptime thật tuyệt. Tuy nhiên, với

datetime.strptime(date_str, "%a %b %d %H:%M:%S %z %Y") 

tôi nhận được

ValueError: 'z' is a bad directive in format '%a %b %d %H:%M:%S %z %Y' 

mặc dù% z có vẻ là đúng.

EDIT2: Thẻ% z dường như không được hỗ trợ. Xem http://bugs.python.org/issue6641. Tôi nhận được xung quanh nó bằng cách sử dụng một đối tượng timedelta để sửa đổi thời gian một cách thích hợp.

Trả lời

2

Tùy thuộc vào nơi chuỗi đó bắt nguồn, bạn có thể sử dụng datetime.strptime để phân tích cú pháp. Vấn đề duy nhất là strptime dựa vào một số thứ cụ thể cho nền tảng, vì vậy nếu chuỗi đó cần có khả năng đến từ các hệ thống khác tùy ý, và tất cả các ngày và tháng không được xác định chính xác như nhau (tháng 6 hoặc tháng 6), bạn có thể gặp rắc rối.

+0

không chắc chắn nếu nó dải múi giờ –

28

Không cần thiết. Hãy thử điều này:

from dateutil import parser 

yourDate = parser.parse(yourString) 

cho "Wed 20 Tháng Mười 0000 16:35:44 2010" trả datetime.datetime(2010, 10, 20, 16, 35, 44, tzinfo=tzutc())

+2

dateutil không có trong thư viện chuẩn. Mặc dù nó là PyPI, do đó, 'pip install python-dateutil 'hoạt động. Giấy phép là PSF. –

+0

Tuyệt vời! apt-get cài đặt python-dateutil – Andy

2

Tôi khá chắc chắn rằng bạn có thể làm điều đó bằng datetime.strptime.

Từ các tài liệu:

datetime.strptime (DATE_STRING, định dạng)

Return một datetime tương ứng với DATE_STRING, phân tích cú pháp theo định dạng . Điều này tương đương với ngày giờ (* (time.strptime (date_string, định dạng) [0: 6])). ValueError được nâng lên nếu date_string và định dạng không thể là được phân tích cú pháp theo time.strptime() hoặc nếu nó trả về một giá trị không phải là thời gian tuple.

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