2011-08-04 15 views
8

Tengo un montón de cadenas de fecha en esta forma: -Convierte una cadena de fecha en AAAAMMDD

30th November 2009 
31st March 2010 
30th September 2010 

que ellos quieren de esta manera: -

YYYYMMDD 

Actualmente estoy haciendo esto : -

parsed_date = "30th November 2009" 
    part = parsed_date.split(' ') 
    daymonth = part[0].strip(string.ascii_letters) 
    mytime = daymonth+" "+part[1]+" "+part[2] 
    time_format = "%d %B %Y" 
    cdate = time.strptime(mytime, time_format) 
    newdate = str(cdate[0])+str(cdate[1])+str(cdate[2]) 

funciona, pero estoy seguro de que hay una manera mejor ...

Respuesta

10

Trate dateutil:

from dateutil import parser 

dates = ['30th November 2009', '31st March 2010', '30th September 2010'] 

for date in dates: 
    print parser.parse(date).strftime('%Y%m%d') 

de salida:

20091130 
20100331 
20100930 

o si quiere hacerlo utilizando el estándar datetime módulo:

from datetime import datetime 

dates = ['30th November 2009', '31st March 2010', '30th September 2010'] 

for date in dates: 
    part = date.split() 
    print datetime.strptime('%s %s %s' % (part[0][:-2]), part[1], part[2]), '%d %B %Y').strftime('%Y%m%d') 
+0

Gracias, eso es perfecto :) –

5

Casi se puede hacer esto con una combinación de strptime and strptime from the datetime module .

El problema que tenemos es que los formatos incorporados admiten fechas como 30 November 2010 pero no 30th November 2010. Entonces, en el siguiente ejemplo he usado a regular expression substitution para eliminar los caracteres problemáticos. (La expresión regular utiliza un look-behind para ver si "st", "nd", "rd" o "th" están precedidos por un dígito, y si es así lo reemplaza con la cadena vacía, y así lo elimina de la cadena.)

>>> import re 
>>> from datetime import datetime 
>>> mydate = "30th November 2009" 
>>> mydate = re.sub("(?<=\d)(st|nd|rd|th)","",mydate) 
>>> mydate 
'30 November 2009' 
>>> mydatetime = datetime.strptime(mydate,"%d %B %Y") 
>>> mydatetime 
datetime.datetime(2009, 11, 30, 0, 0) 
>>> mydatetime.strftime("%Y%M%d") 
'20090030' 
Cuestiones relacionadas