2012-10-07 14 views
5

Ho alcune date il cui formato è d/m/yyyy (ad esempio, 2/28/1987). Mi piacerebbe averlo in formato ISO: 1987-02-28Come posso formattare la data in ISO usando Python?

penso che possiamo fare in questo modo, ma sembra un po 'pesante:

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

C'è un altro modo di fare con Python?

+0

ho lista enorme di date quindi, la mia prima opzione sarebbe quella di copiare/incollare in un editor di fogli di calcolo come LibreOffice e di cambiare la cella di formato in o rder per impostare il formato giusto ma che non funziona .. – Reveclair

risposta

17

È possibile utilizzare il datetime module:

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

o, come il codice in esecuzione:

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

+1 per 'isoformat()'. Non ho mai saputo di quello. – Blender

1

quello che hai è quasi come vorrei scriverlo, l'unico miglioramento importante che posso suggerire è utilizzando pianura vecchio split invece di re.split, dal momento che non hai bisogno di un'espressione regolare:

arr_str = str_date.split('/') 

Se dovevo fare qualcosa di più complicato come quello che raccomanderei time.strftime, ma questo è significativamente lo più costoso rispetto al bashing delle stringhe.

6

userei il modulo datetime di analizzarlo:

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

'.isoformat()' in date usa la stessa stringa di formattazione OOTB. :-) –

Problemi correlati