日付と時刻にゼロパディングを使用しないPython日時を印刷するための形式はありますか?
私が現在使用しているフォーマット:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
結果: 2012年2月29日05:03 PM
希望: 2012年2月29日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", " ")
.lstrip("0")
先行ゼロを取り除くために行う理由です。
上記の「全か無かの」先行ゼロアスペクトを回避するもう1つの方法は、フィールドタイプの前にマイナスを配置することです。
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
次にこれ:「2015年4月10日03:00 AM」
なる: '2015年4月10日3:00 AM'
必要に応じて、オプションでその日の前にマイナスを置くことができます。
編集:マイナス機能は、Linuxのstrftimeのマンページの「Glibcnotes」で説明されているように、GNU Cライブラリ(「glibc」)から派生しています。
date.__format__
かtime.strftime
、docs.python.org/3/library/...を、そしてdocs.python.org/3.8/library/time.html#time.strftimeそれぞれ
新しい文字列フォーマットシステムは、の代替手段を提供し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
ない代わりに、先行ゼロの空白で埋め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年より前の日付では、一部の(すべて?)プラットフォームで失敗します。
"{0.day} {0:%B %Y}".format(d)
これ'2 August 2013'
により、このコメントの日として表示されます:)
受け入れられた回答は適切な解決策ではありません(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上のChrisFreemanからの良い答え。
Windowsでは、次のようになります。
mydate.strftime('%#m/%#d/%Y')
それが役立つかもしれないと思った。
「%l」(小文字のL)は、(「%I」の代わりに)1時間機能します。私はここで別の答えからこれを知っているだけです
ただし、残念ながら、日付/時刻の他の要素のコードはありません。