2012-02-29 23 views
22

Hàm để lấy ngày giờ từ chuỗi, datetime.strptime(date_string, format) yêu cầu định dạng chuỗi làm đối số thứ hai. Có cách nào để xây dựng một datetime từ một chuỗi mà không cần biết định dạng chính xác, và có Python đoán tốt nhất không?datetime từ chuỗi trong Python, định dạng chuỗi đoán tốt nhất

+1

bản sao có thể có của [Có thư viện python nào để phân tích ngày và giờ từ ngôn ngữ tự nhiên không?] (Http://stackoverflow.com/questions/1495487/is-there-any-python-library-for -parsing-date-and-times-from-a-natural-language) –

+4

Việc phân biệt giữa mm/dd/yyyy với dd/mm/yyyy là một vấn đề thú vị, với kết quả tai hại nếu bạn hiểu sai. –

+0

Nó phụ thuộc vào mức độ không chính xác của bạn khi bạn nói, "không có định dạng chính xác". Bạn có thể đưa ra ví dụ về các loại đầu vào bạn muốn có thể xử lý không? Hoặc, bạn có thể có khả năng có thông tin một phần về định dạng (chẳng hạn như liệu năm có là 2 hoặc 4 chữ số hay là tháng trước ngày hoặc ngược lại)? Nếu không có ít nhất một số thông tin cơ bản, ngay cả một người không thể làm những gì bạn yêu cầu. Có phải là ngày 01/02/12 ngày 1 tháng 2 năm 2012, ngày 2 tháng 1 năm 2012, ngày 12 tháng 2 năm 2001, ngày 2 tháng 12 năm 2001 hay thứ gì đó khác? –

Trả lời

4

Trở lại trước khi tôi là một anh chàng python, tôi là một anh chàng perl. Một trong những điều mà tôi đã luôn luôn bỏ lỡ nhưng không thấy bất cứ điều gì gần với nó là Date::Manip. Mô-đun đó có thể trích xuất một dấu thời gian tốt từ một loạt các nibbles. Tôi gần như nghi ngờ rằng đó là tác giả đánh một thỏa thuận với Quỉ.

tôi đã chạy ngang qua một vài điều mà lấy đâm vào nó bằng Python:

Nếu bạn tìm thấy bất cứ điều gì tốt hơn tôi rất muốn nghe về nó mặc dù.

+0

Cảm ơn các đề xuất- Xem câu trả lời của tôi, nghĩ rằng tôi đã tìm thấy câu trả lời của riêng mình với thư viện [dateutil] (http://pypi.python.org/pypi/python-dateutil/1.5). – Yarin

47

Sử dụng thư viện dateutil.

tôi đã được sử dụng như một dateutil lib không thể thiếu để xử lý các múi giờ
(Xem Convert UTC datetime string to local datetimeHow do I convert local time to UTC in Python?)

Và Tôi vừa mới nhận ra nó đã hỗ trợ cập nhật phân tích cú pháp:

import dateutil.parser 
yourdate = dateutil.parser.parse(datestring) 

(Xem thêm How do I translate a ISO 8601 datetime string into a Python datetime object?)

8

Có thể lấy đi một hàm đơn giản nếu chỉ kiểm tra ngày tháng.

def get_date(s_date): 
    date_patterns = ["%d-%m-%Y", "%Y-%m-%d"] 

    for pattern in date_patterns: 
     try: 
      return datetime.datetime.strptime(s_date, pattern).date() 
     except: 
      pass 

    print "Date is not in expected format: %s" %(s_date) 
    sys.exit(0) 
+0

Nhanh hơn nhiều so với sử dụng dateutil đã cung cấp định dạng ngày tháng của bạn. – rbennell

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