2015-06-26 11 views
5

Tôi có một trường xuất hiện dưới dạng chuỗi và biểu thị thời gian. Đôi khi nó trong 12 giờ, đôi khi trong 24 giờ. Có thể giá trị:Python: Làm thế nào tôi có thể chuyển đổi chuỗi thành datetime mà không biết định dạng?

  1. 8:26
  2. 08:26 am
  3. 13:27

Có một chức năng mà sẽ chuyển đổi các định dạng thời gian bằng cách thông minh về nó? Tùy chọn 1 không có bởi vì ở định dạng 24 giờ, trong khi tùy chọn 2 có 0 trước nó và tùy chọn 3 rõ ràng là ở định dạng 24 giờ. Có một hàm trong Python/A lib có quyền này:

time = func(str_time) 
+0

liên quan: [Chuyển đổi chuỗi thành datetime] (http://stackoverflow.com/q/466345/4279) – jfs

+0

1 cho trọng tâm cụ thể về "định dạng không được biết" (tức là sự nhầm lẫn giữa ví dụ dd/mm và mm/dd không phải là một mối quan tâm). Nếu nó được biết, 'dateutil' sẽ là một sự lựa chọn không đáng tin cậy. –

Trả lời

12

câu trả lời siêu ngắn:

from dateutil import parser 
parser.parse("8:36pm") 
>>>datetime.datetime(2015, 6, 26, 20, 36) 
parser.parse("18:36") 
>>>datetime.datetime(2015, 6, 26, 18, 36) 

Dateutil nên có sẵn cho bạn cài đặt python; Không cần cho một cái gì đó lớn như gấu trúc

Nếu bạn muốn trích xuất thời gian từ đối tượng datetime:

t = parser.parse("18:36").time() 

mà sẽ cung cấp cho bạn một đối tượng time (nếu đó là sự giúp đỡ hơn đối với bạn). Hoặc bạn có thể trích xuất các lĩnh vực cá nhân:

dt = parser.parse("18:36") 
hours = dt.hour 
minute = dt.minute 
+0

Tôi có thể làm điều này mà không có dateutil? Vấn đề là tôi đang chạy trên Google App Engine và việc sử dụng thư viện bên ngoài Python STL là một vấn đề. –

+0

@DebnathSinha: Python STL? đó là gì Ngoài ra, nếu bạn biết chỉ có ba loại thứ và không muốn sử dụng thư viện bên ngoài (mặc dù câu hỏi của bạn ** đặc biệt ** được yêu cầu cho điều đó), hãy tự viết trình phân tích cú pháp. Nó thực sự không khó với 'string.split (": ")' và thích. –

+0

Ur phải, xấu của tôi, tôi đã đề cập đến một thư viện là ok. STL không phải là thuật ngữ thích hợp cho Python, được mượn từ ngày C++ của tôi, tôi có nghĩa là thư viện chuẩn. Vấn đề là App Engine không cho phép chúng tôi cài đặt bất kỳ thư viện nào, nhưng chỉ sử dụng thư viện chuẩn. Là dateutil tất cả các mã Python (không có C)? Nếu vậy, tôi có thể bao gồm nó từ nguồn trong cây mã nguồn của tôi thay vì phải cài đặt nó. Hãy nghĩ rằng có thể làm việc. Cảm ơn! –

2

có một chức năng như vậy trong gấu trúc

import pandas as pd 
d = pd.to_datetime('<date_string>') 
Các vấn đề liên quan