2010-02-15 15 views
72

Tengo una cadena de fecha con el formato 'Lun Feb 15 2010'. Quiero cambiar el formato a '15/02/2010 '. ¿Cómo puedo hacer esto?Parse date string y cambie el formato

módulo
+0

Duplicado de todos estos: http://stackoverflow.com/search?q=%5Bpython%5D+parse+date.Duplicado exacto de esto: http://stackoverflow.com/questions/1713594/parsing-dates-and-times-from-strings-using-python –

+0

posible duplicado de [Cómo convertir una cadena de fecha a un formato diferente en python] (http://stackoverflow.com/questions/14524322/how-to-convert-a-date-string-to-different-format-in-python) – Pureferret

Respuesta

91

datetime que podría ayudar con eso:

datetime.datetime.strptime(date_string, format1).strftime(format2) 
+1

datetime.datetime (Lun Feb 15 2010, "% a% b% d% Y "). strftime ("% d /% m /% Y ") ¿Es correcto? pero tengo un error – Nimmy

+1

@nimmyliji: ¿Viste la parte de "cuerda", ¿verdad? –

+1

@nimmyliji: se arregló 10 minutos antes de que publicaras tu comentario. y, por supuesto, debe tener 'date_string' como una cadena. – SilentGhost

20
>>> from_date="Mon Feb 15 2010" 
>>> import time     
>>> conv=time.strptime(from_date,"%a %b %d %Y") 
>>> time.strftime("%d/%m/%Y",conv) 
'15/02/2010' 
37

puede instalar la biblioteca dateutil. Su función parse puede averiguar en qué formato está una cadena sin tener que especificar el formato como lo hace con datetime.strptime. cadena

from dateutil.parser import parse 
dt = parse('Mon Feb 15 2010') 
print(dt) 
# datetime.datetime(2010, 2, 15, 0, 0) 
print(dt.strftime('%d/%m/%Y')) 
# 15/02/2010 
+0

dateutil.parse es una mejor alternativa si el formato exacto de una cadena ISO legal es desconocido. ISO puede o no contener microsegundos. Puede contener o no la "Z" final. datetime.strptime no es lo suficientemente flexible como para acomodarse a eso. –

+3

Pase Fecha debe usarse con cuidado. parse ('12 .07.2017 ') devuelve datetime (2017, 12, 7, ..) pero parse ('13 .07.2017') devuelve .datetime (2017, 7, 13, ...) – ego2dot0

12

convertido al objeto de fecha y hora

from datetime import datetime 
s = "2016-03-26T09:25:55.000Z" 
f = "%Y-%m-%dT%H:%M:%S.%fZ" 
datetime = datetime.strptime(s, f) 
print(datetime) 
output: 
2016-03-26 09:25:55 
1

Sólo por el bien de finalización: al analizar una fecha con strptime() y la fecha contiene el nombre de un día, mes, etc., tenga en cuenta que tiene que dar cuenta de la configuración regional.

Se menciona como una nota al pie en el docs también.

A modo de ejemplo:

import locale 
print(locale.getlocale()) 

>> ('nl_BE', 'ISO8859-1') 

from datetime import datetime 
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d') 

>> ValueError: time data '6-Mar-2016' does not match format '%d-%b-%Y' 

locale.setlocale(locale.LC_ALL, 'en_US') 
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d') 

>> '2016-03-06' 
3

Como esta pregunta viene a menudo, aquí es la simple explicación.

datetime o time módulo tiene dos funciones importantes.

  • strftime - crea una representación de cadena de fecha u hora de un objeto de fecha y hora o una hora.
  • strptime - crea un objeto datetime o time a partir de una cadena.

En ambos casos, necesitamos una cadena de formato. Es la representación que indica cómo se formatea la fecha o la hora en su cadena.

Ahora supongamos que tenemos un objeto de fecha.

>>> from datetime import datetime 
>>> d = datetime(2010, 2, 15) 
>>> d 
datetime.datetime(2010, 2, 15, 0, 0) 

Si queremos crear una cadena de esta fecha en el formato 'Mon Feb 15 2010'

>>> s = d.strftime('%a %b %d %y') 
>>> print s 
Mon Feb 15 10 

supongamos que queremos convertir este s de nuevo a un objeto datetime.

>>> new_date = datetime.strptime(s, '%a %b %d %y') 
>>> print new_date 
2010-02-15 00:00:00 

Consulte This documento todas las directivas de formato con respecto a datetime.