strftimeを使用して期間(AM / PM)をどのように説明できますか?


152

具体的には、これを単純化するコードがあります。

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)

何ができますか?Pythonは日付を解析するときにピリオド指定子を無視するだけですか、それとも私が愚かなことをしていますか?

回答:


213

Pythonのtime.strftimeドキュメントは言う:

strptime()関数と共に使用した%p場合、%Iディレクティブが時間の解析に使用されている場合、ディレクティブは出力の時間フィールドにのみ影響します。

案の定、を変更して機能%H%Iせます。


2
これは、タイムストリングに0.00pmがなければ%I1から始まります)、すばらしいです。
アンディヘイデン、

1
@AndyHayden午後12時または午前12時です。午前0時と午後0時のどちらが意味をなすかわかりません。24時間形式でのみ、0番目の時間は意味がありますが、AM / PMではありません。
アルン

また、ロケールを確認してください。am / pmを使用しないロケールを使用している場合、am / pmを使用するロケールに切り替える必要があります。ロケールとしてde_DEを使用する場合、%Iと%pを使用し、%pを空白のままにしました。en_GBに切り替えると、%pが表示されます。
Torsten

56
format = '%Y-%m-%d %H:%M %p'

形式はの%H代わりに使用しています%I。以来%H、「24時間」の形式で、それは可能性が高いだけで廃棄だ%p情報を。をに変更する%Hと、問題なく動作します%I



15

%H(24時間制の時間)を%I(12時間制の時間)に置き換えてみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.