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」として表される形式
datetime.strftime()
で利用可能なフォーマットオプションはすべてゼロパッドされます。もちろん、独自の書式設定関数をロールすることもできますが、この場合の最も簡単な解決策は、datetime.strftime()
の結果を後処理することです。
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
上記の「すべてまたはなし」の先頭のゼロアスペクトを回避するもう1つの代替方法は、フィールドタイプの前にマイナスを置くことです。
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
次に、「4/10/2015 03:00 AM」
になる:「4/10/2015 3:00 AM」
必要に応じて、オプションでその日の前にマイナス記号を付けることができます。
新しい文字列フォーマットシステムは、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
指定子も使用できます。便宜上、strftime
doesは、先頭のゼロの代わりに空白が埋め込まれた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年より前の日付の一部の(すべての?)プラットフォームで失敗します。
適切な解決策ではなく受け入れられた回答(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実装では機能しません。
Linux上のChris Freemanからの良い回答。
Windowsでは、次のとおりです。
mydate.strftime('%#m/%#d/%Y')
それが役立つかもしれないと思った。