Bagaimana saya bisa menghitung periode (AM / PM) menggunakan strftime?

152

Secara khusus saya memiliki kode yang menyederhanakan ini:

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)

Apa yang menyebabkannya? Apakah Python mengabaikan penentu periode ketika menguraikan tanggal atau apakah saya melakukan sesuatu yang bodoh?

Triptych
sumber

Jawaban:

213

Python time.strftimedocs mengatakan:

Saat digunakan dengan fungsi strptime (), %parahan hanya memengaruhi bidang jam keluaran jika %Iarahan digunakan untuk menguraikan jam.

Benar saja, mengubah Anda %Huntuk %Imembuatnya bekerja.

Ned Batchelder
sumber
2
Yang bagus kecuali string waktu Anda memiliki pukul 13:00, ( %Idimulai pada 1) !!
Andy Hayden
1
@AndyHayden jam 12 siang atau 12 siang. Tidak yakin apakah 0 AM atau 0 PM masuk akal. Hanya dalam format 24 jam, 0 jam masuk akal, tetapi kemudian bukan AM / PM.
arun
Perhatikan juga untuk memeriksa lokasi Anda. Jika Anda menggunakan lokal yang tidak menggunakan am / pm Anda harus beralih ke lokal yang tidak menggunakan am / pm Saya menggunakan% I dan% p dan% p dibiarkan kosong ketika menggunakan de_DE sebagai lokal. Beralih ke en_GB membuat% p terlihat.
Torsten
56
format = '%Y-%m-%d %H:%M %p'

Formatnya menggunakan %Hbukan %I. Karena %Hformat "24 jam", kemungkinan hanya membuang %pinformasi. Ini berfungsi dengan baik jika Anda mengubah %Hke %I.

jamessan
sumber
23

Anda menggunakan %H(format 24 jam) alih-alih %I(format 12 jam).

Tim Pietzcker
sumber
15

Coba ganti% H (Jam pada jam 24 jam) dengan% I (Jam pada jam 12 jam)?

keithjgrant
sumber