web-dev-qa-db-ja.com

Pythonゼロパディングなしの日時フォーマット

Python datetimesでゼロパディングを使用しないdatetimesを印刷するためのフォーマットはありますか?

現在使用している形式:

mydatetime.strftime('%m/%d/%Y %I:%M%p')

結果: 2012/02/29/05:03PM
希望: 2/29/2012 5:03 PM

月は「02」ではなく「2」、時刻は「05:03 PM」ではなく「5:03 PM」として表される形式

66
Yarin

datetime.strftime()で利用可能なフォーマットオプションはすべてゼロパッドされます。もちろん、独自の書式設定関数をロールすることもできますが、この場合の最も簡単な解決策は、datetime.strftime()の結果を後処理することです。

s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
58
Sven Marnach

上記の「すべてまたはなし」の先頭のゼロアスペクトを回避するもう1つの代替方法は、フィールドタイプの前にマイナスを置くことです。

mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

次に、「4/10/2015 03:00 AM」

になる:「4/10/2015 3:00 AM」

必要に応じて、オプションでその日の前にマイナス記号を付けることができます。

98
ChrisFreeman

新しい文字列フォーマットシステムは、strftimeに代わるものを提供します。とても読みやすい-実際、そのアカウントでstrftimeよりも望ましいかもしれません。ゼロパッドを行わないという事実は言うまでもありません:

>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'

おそらく分のフィールドにゼロパディングが必要なので、これを行うことができます。

>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'

「軍事」時間ではなく「通常」時間を使用する場合は、標準のstrftime指定子も使用できます。便宜上、strftimedoesは、先頭のゼロの代わりに空白が埋め込まれた12時間のコードを提供します。

'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014  6:00PM'

悲しいかな、これはやや読みにくくなります。そして@mlissnerが指摘しているように、strftimeは1900年より前の日付の一部の(すべての?)プラットフォームで失敗します。

84
senderle

適切な解決策ではなく受け入れられた回答(IMHO)適切に文書化された方法:

Linuxでは、「#」は「-」に置き換えられます。

%-d、%-H、%-I、%-j、%-m、%-M、%-S、%-U、%-w、%-W、%-y、%-Y

Windowsでは、「-」は「#」に置き換えられます。

%#d、%#H、%#I、%#j、%#m、%#M、%#S、%#U、%#w、%#W、%#y、%#Y

#Linux
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

# Windows
mydatetime.strftime('%#m/%d/%Y %#I:%M%p')

ソース: https://msdn.Microsoft.com/en-us/library/fe06s4ak.aspx

Sagnetaが述べたように、Windowsでの#ハッシュトリックは、ネイティブpython実行可能ファイルでのみ利用可能です。これは、cygwinベースのpython実装では機能しません。

33
user1719826

Linux上のChris Freemanからの良い回答。

Windowsでは、次のとおりです。

mydate.strftime('%#m/%#d/%Y')

それが役立つかもしれないと思った。

6
user3685285