2012-10-07 13 views
5

Mam pewne daty, które format jest d/m/yyyy (np. 2/28/1987). chciałbym mieć go w formacie ISO: 1987-02-28Jak sformatować datę w ISO za pomocą Pythona?

myślę, że możemy zrobić to w ten sposób, ale wydaje się trochę ciężkie:

str_date = '2/28/1987' 
arr_str = re.split('/', str_date) 
iso_date = arr_str[2]+'-'+arr_str[0][:2]+'-'+arr_str[1] 

Czy jest jakiś inny sposób to zrobić to z Pythonem?

+0

mam ogromną listę dat, więc moją pierwszą opcją byłoby skopiowanie/wklejenie w edytorze arkusza kalkulacyjnego, np. LibreOffice i zmiana komórki formatu o rder, aby ustawić odpowiedni format, ale to nie działa. – Reveclair

Odpowiedz

17

Można użyć datetime module:

datetime.datetime.strptime(str_date, '%m/%d/%Y').date().isoformat() 

lub jako kod uruchomiony:

>>> import datetime 
>>> str_date = '2/28/1987' 
>>> datetime.datetime.strptime(str_date, '%m/%d/%Y').date().isoformat() 
'1987-02-28' 
+2

+1 dla 'isoformat()'. Nigdy o tym nie wiedziałem. – Blender

1

Co masz jest prawie jak bym go pisać, jedyną znaczącą poprawę mogę zaproponować to stosując zwykły stary split zamiast re.split, ponieważ nie trzeba wyrażenia regularnego:

arr_str = str_date.split('/') 

Jeśli potrzebne do zrobienia czegoś bardziej skomplikowanego, polecam time.strftime, ale to jest znacznie bardziej kosztowne niż bashowanie ciągów.

6

chciałbym użyć modułu datetime aby je przeanalizować:

>>> from datetime import datetime 
>>> date = datetime.strptime('2/28/1987', '%m/%d/%Y') 
>>> date.strftime('%Y-%m-%d') 
'1987-02-28' 
+0

'.isoformat()' na datach używa tego samego łańcucha formatowania OOTB. :-) –

Powiązane problemy