2012-10-07 18 views
5

Tengo algunas fechas cuyo formato es d/m/yyyy (por ejemplo, 2/28/1987). me gustaría tenerlo en el formato ISO: 1987-02-28¿Cómo puedo formatear la fecha en ISO usando Python?

Creo que podemos hacerlo de esa manera, pero parece un poco pesado:

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

¿Hay otra manera de hacerlo con Python?

+0

tengo enorme lista de fechas, mi primera opción sería copiar/pegar en un editor de hojas de cálculo como LibreOffice y cambiar la celda de formato en o rder para establecer el formato correcto pero eso no funciona .. – Reveclair

Respuesta

17

Se podría utilizar el datetime module:

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

o, en su código que se ejecuta:

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

+1 para 'isoformat()'. Nunca supe sobre eso. – Blender

1

lo que tienes es casi la forma en que iba a escribir, la única mejora importante que puedo sugerir es utilizar el viejo y simple split en lugar de re.split, ya que no es necesario una expresión regular:

arr_str = str_date.split('/') 

Si Necesitaba hacer algo más complicado como ese, recomendaría time.strftime, pero eso es significativamente más costoso que el ataque de cadenas.

6

me gustaría utilizar el módulo datetime a analizarlo:

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

'.isoformat()' en las fechas utiliza la misma cadena de formato OOTB. :-) –

Cuestiones relacionadas