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?

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.


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.



15

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.