126

日付と時刻にゼロパディングを使用しない 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' で表す形式は何ですか?

4

7 に答える 7

239

上記の "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>

于 2015-05-01T01:32:42.397 に答える
107

新しい文字列フォーマット システムは、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 が指摘しているように、strftime1900 年より前の日付では、一部の (すべての?) プラットフォームで失敗します。

于 2012-03-02T00:00:10.227 に答える
90

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

s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
于 2012-03-01T23:46:19.130 に答える
18

LinuxのChris Freemanからの良い答え。

Windows では、次のようになります。

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

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

于 2016-11-01T17:17:49.447 に答える