2015-06-26 14 views
5

Mam pole, które pojawia się jako ciąg znaków i reprezentuje czas. Czasami jest to 12 godzin, czasem 24 godziny. Możliwe wartości:Python: Jak mogę przekonwertować ciąg na datetime bez znajomości formatu?

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

Czy istnieje funkcja, która konwertuje je do formatu czasu będąc inteligentnym o nim? Opcja 1 nie ma, ponieważ jest w formacie 24-godzinnym, podczas gdy opcja 2 ma przed nią 0, a opcja 3 jest oczywiście w formacie 24-godzinnym. Czy istnieje funkcja w Pythonie/lib, dokłada:

time = func(str_time) 
+0

related: [Konwersja ciąg na datetime] (http://stackoverflow.com/q/466345/4279) – jfs

+0

+1 za szczególnym naciskiem na "formacie nie znany" (np. pomylenie między np. dd/mm i mm/dd nie jest problemem). Gdyby było wiadomo, "dateutil" byłby niewiarygodnym wyborem. –

Odpowiedz

12

bardzo krótka odpowiedź:

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 powinny być dostępne dla instalacja Pythona; Nie potrzeba czegoś dużego jak pandy

Jeśli chcesz wyodrębnić razem z obiektu datetime:

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

który daje time obiektu (jeśli to o dalszą pomoc do Ciebie). Albo można wyodrębnić poszczególne pola:

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

Czy mogę to zrobić bez dateutil? Problem polega na tym, że używam Google App Engine, a używanie bibliotek poza Pythonem STL to problem. –

+0

@DebnathSinha: Python STL? Co to jest? Ponadto, jeśli wiesz, że istnieją tylko trzy typy rzeczy i nie chcesz korzystać z biblioteki zewnętrznej (mimo że twoje pytanie ** specjalnie ** wymaga tego), napisz sam parser. To naprawdę nie jest trudne z 'string.split (": ")' i lubi. –

+0

Ur, moje złe, wspominałem, że biblioteka była w porządku. STL nie jest właściwym terminem dla Pythona, był zapożyczeniem z mojego C++ dni, miałem na myśli standardową bibliotekę. Problem polega na tym, że App Engine nie pozwala nam instalować żadnej biblioteki, ale korzysta tylko z biblioteki standardowej. Czy dateutil to cały kod Pythona (bez C)? Jeśli tak, być może będę mógł dołączyć go ze źródła do mojego drzewa kodu źródłowego, zamiast go instalować. Pomyśl, może to zadziała. Dzięki! –

2

istnieje jedna taka funkcja w pand

import pandas as pd 
d = pd.to_datetime('<date_string>') 
Powiązane problemy