2009-02-02 84 views
20

Utilizando un script de Python, necesito leer un archivo CVS donde las fechas tienen formato DD/MM/YYYY, y convertirlas a AAAA-MM-DD antes de guardar esto en una base de datos SQLite.¿Conversión de fecha entre DD/MM/YYYY y YYYY-MM-DD?

Esto casi funciona, pero falla porque no proporciono tiempo:

from datetime import datetime 

lastconnection = datetime.strptime("21/12/2008", "%Y-%m-%d") 

#ValueError: time data did not match format: data=21/12/2008 fmt=%Y-%m-%d 
print lastconnection 

Asumo que hay un método en el objeto de fecha y hora para llevar a cabo esta conversión muy fácilmente, pero no puedo encontrar un ejemplo de cómo hacerlo. Gracias.

Respuesta

11

primera vez que se necesita para convertir cadena en tupla de fecha y hora, y luego convertir esa fecha y hora tupla de cadena, sería algo así:

lastconnection = datetime.strptime("21/12/2008", "%d/%m/%Y").strftime('%Y-%m-%d') 
+0

Decir "tupla" parece un poco confuso; a partir de Python 2.2, 'strptime()' [devuelve "a' struct_time' "] (http://docs.python.org/library/time.html#time.strptime), que [es un objeto] (http: //docs.python.org/library/time.html#time.struct_time) con una interfaz llamada "tupla". – supervacuo

43

Su código de ejemplo es incorrecto. Esto funciona:

import datetime 

datetime.datetime.strptime("21/12/2008", "%d/%m/%Y").strftime("%Y-%m-%d") 

La llamada a strptime() analiza el primer argumento de acuerdo con el formato especificado en el segundo, por lo que los dos tienen que coincidir. Luego puede llamar a strftime() para formatear el resultado en el formato final deseado.

3

¿Alguien más piensa que es un desperdicio convertir estas cadenas en objetos de fecha/hora para lo que es, al final, una simple transformación de texto? Si está seguro de las fechas de entrada son válidas, sólo puede utilizar:

>>> ddmmyyyy = "21/12/2008" 
>>> yyyymmdd = ddmmyyyy[6:] + "-" + ddmmyyyy[3:5] + "-" + ddmmyyyy[:2] 
>>> yyyymmdd 
'2008-12-21' 

Esto es casi seguro que sea más rápido que la conversión hacia y desde una fecha.

+8

Si le preocupa la velocidad de conversión hasta la fecha, claramente no tiene nada más que preocuparse. El código publicado por unwind es mucho más claro y fácil de mantener que el tuyo. Esa debería ser su principal preocupación aquí, no la velocidad. –

+0

Echo de menos la posibilidad de votar este comentario. –

1

Soy nuevo en la programación. Quería convertir de yyyy-mm-dd a dd/mm/yyyy para imprimir una fecha en el formato que las personas en mi parte del mundo usan y reconocen.

La respuesta aceptada anteriormente me puso en el camino correcto.

La respuesta terminé con mi problema es:

import datetime 

today_date = datetime.date.today() 
print(today_date) 

new_today_date = today_date.strftime("%d/%m/%Y") 
print (new_today_date) 

Las primeras dos líneas después de la declaración de importación da la fecha actual en el formato de EE.UU. (01/26/2017). Las dos últimas líneas convierten esto al formato reconocido en el Reino Unido y otros países (26/01/2017).

Puede acortar este código, pero lo dejé tal cual porque me sirve de principiante. ¡Espero que esto ayude a otros programadores principiantes a comenzar!

+0

Hola y bienvenidos a StackOverflow. Su respuesta realmente no va con la pregunta, que fue sobre una conversión de 'DD/MM/YYYY' a' YYYY-MM-DD'. Su publicación puede ser eliminada, sin embargo, lo invito a mantenerse activo en el sitio. ¡Gracias! – lrnzcig

+0

@lrnzcig Gracias por tu comentario. Veo a que te refieres. Tal vez debería haber publicado mi pregunta y dejar que alguien la responda. He tenido muchas preguntas hasta ahora, pero he logrado responderlas buscando en línea y en mi libro de pitón de confianza. – Mark

Cuestiones relacionadas