2009-11-18 12 views
89

Específicamente tengo código que se simplifica a esto:¿Cómo puedo registrar el período (AM/PM) con datetime.strptime?

from datetime import datetime 
date_string = '2009-11-29 03:17 PM' 
format = '%Y-%m-%d %H:%M %p' 
my_date = datetime.strptime(date_string, format) 

# This prints '2009-11-29 03:17 AM' 
print my_date.strftime(format) 

Lo que da? ¿Python simplemente ignora el especificador de período al analizar las fechas o estoy haciendo algo estúpido?

+4

Gracias a todos por las respuestas rápidas. Ojalá pudiera votar más de una vez. – Triptych

Respuesta

115

El pitón time.strftime docs decir:

Cuando se utiliza con la función strptime(), la directiva %p única afecta el campo de la hora de salida si la directiva %I se utiliza para analizar la hora.

Efectivamente, cambiar su %H a %I lo hace funcionar.

+1

Ugh. Por supuesto. Gracias. – Triptych

+0

Lo cual es genial * a menos que * sus cadenas de tiempo tengan 0.00pm, ('% I' comienza en 1) !! –

9

Intente reemplazar% H (Hora en un reloj de 24 horas) con% I (Hora en un reloj de 12 horas)?

12

Has utilizado %H (formato de 24 horas) en lugar de %I (formato de 12 horas).

29
format = '%Y-%m-%d %H:%M %p' 

El formato está utilizando %H en lugar de %I. Como el %H es el formato de "24 horas", es probable que descarte la información %p. Funciona bien si cambia el %H al %I.

Cuestiones relacionadas