Como posso contabilizar o período (AM / PM) usando o strftime?

152

Especificamente, tenho um código que simplifica isso:

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)

O que da? O Python simplesmente ignora o especificador de período ao analisar datas ou estou fazendo algo estúpido?

Tríptico
fonte

Respostas:

213

Os time.strftimedocumentos do Python dizem:

Quando usada com a função strptime (), a %pdiretiva afeta apenas o campo da hora de saída se a %Idiretiva for usada para analisar a hora.

Com certeza, alterar o seu %Hpara %Ifazê-lo funcionar.

Ned Batchelder
fonte
2
O que é ótimo, a menos que suas sequências de tempo tenham 0,00pm ( %Icomeça em 1) !!
Andy Hayden
1
@AndyHayden são 12 ou 12 horas. Não tenho certeza se 0 AM ou 0 PM faz sentido. Somente no formato de 24 horas, a 0ª hora faz sentido, mas não é AM / PM.
arun
Observe também que seu local está em cheque. Se você estiver usando um código de idioma que não use am / pm, será necessário alternar para um código de idioma que use am / pm. Usei% I e% pe ep foram deixados em branco ao usar de_DE como código de idioma. Mudar para en_GB tornou% p visível.
Torsten
56
format = '%Y-%m-%d %H:%M %p'

O formato está usando em %Hvez de %I. Como %Hé o formato "24 horas", é provável que apenas descarte as %pinformações. Funciona muito bem se você mudar %Hpara %I.

jamessan
fonte
23

Você usou %H(formato de 24 horas) em vez de %I(formato de 12 horas).

Tim Pietzcker
fonte
15

Tente substituir% H (hora em um relógio de 24 horas) por% I (hora em um relógio de 12 horas)?

keithjgrant
fonte