日付と時刻にゼロパディングを使用しない Python 日付時刻を印刷するための形式はありますか?
私が今使っているフォーマット:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
結果: 2012/02/29 05:03PM
希望: 2012/2/29 5:03PM
月を '02' ではなく '2' で表し、時間を '05:03PM' ではなく '5:03PM' で表す形式は何ですか?
日付と時刻にゼロパディングを使用しない Python 日付時刻を印刷するための形式はありますか?
私が今使っているフォーマット:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
結果: 2012/02/29 05:03PM
希望: 2012/2/29 5:03PM
月を '02' ではなく '2' で表し、時間を '05:03PM' ではなく '5:03PM' で表す形式は何ですか?
上記の "all or none" 先行ゼロの側面を回避する別の方法は、フィールド タイプの前にマイナスを配置することです。
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
次に、「2015 年 4 月 10 日 03:00AM」
'4/10/2015 3:00AM' になります。
必要に応じて、日の前にマイナスを付けることができます。
編集: マイナス機能は、 Linux strftime マンページの「Glibc に関する注意事項」 に記載されているように、GNU C ライブラリ (「glibc」) から派生しています。</p>
新しい文字列フォーマット システムは、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
指定子を使用できます。便宜上、先行ゼロの代わりに空白を埋め込んだ 12 時間制のコードを提供しますstrftime
。
'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014 6:00PM'
残念ながら、これはやや読みにくくなります。@mlissner が指摘しているように、strftime
1900 年より前の日付では、一部の (すべての?) プラットフォームで失敗します。
で利用可能な書式設定オプションdatetime.strftime()
は、すべてゼロで埋められます。もちろん、独自の書式設定関数をロールすることもできますが、この場合の最も簡単な解決策は、次の結果を後処理することですdatetime.strftime()
。
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
LinuxのChris Freemanからの良い答え。
Windows では、次のようになります。
mydate.strftime('%#m/%#d/%Y')
それが役立つかもしれないと思った。