¿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?

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.


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.



15

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.