¿Cómo puedo contabilizar el período (AM / PM) usando strftime?

152

Específicamente tengo un código que simplifica esto:

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 ignora el especificador de período al analizar fechas o estoy haciendo algo estúpido?

Tríptico
fuente

Respuestas:

213

Los time.strftimedocumentos de Python dicen:

Cuando se usa con la función strptime (), la %pdirectiva solo afecta el campo de hora de salida si la %Idirectiva se usa para analizar la hora.

Efectivamente, cambiar tu %Ha %Ihace que funcione.

Ned Batchelder
fuente
2
¡Lo cual es genial a menos que sus cadenas de tiempo tengan 0.00pm, ( %Icomienza en 1) !!
Andy Hayden
1
@AndyHayden son las 12 p.m. o las 12 a.m. No estoy seguro si 0 AM o 0 PM tiene sentido. Solo en formato de 24 horas, la hora 0 tiene sentido, pero no es AM / PM.
Arun
También tenga en cuenta que su localidad esté bajo control. Si está utilizando una configuración regional que no utiliza am / pm, deberá cambiar a una configuración regional que sí utilice am / pm. Utilicé% I y% p, y% p se dejó en blanco al usar de_DE como configuración regional. El cambio a en_GB hizo visible% p.
Torsten
56
format = '%Y-%m-%d %H:%M %p'

El formato está usando en %Hlugar de %I. Dado que %Hes el formato de "24 horas", es probable que solo se descarte la %pinformación. Funciona bien si cambia el %Ha %I.

jamessan
fuente
23

Usó %H(formato de 24 horas) en lugar de %I(formato de 12 horas).

Tim Pietzcker
fuente
15

¿Intenta reemplazar% H (hora en un reloj de 24 horas) con% I (hora en un reloj de 12 horas)?

keithjgrant
fuente