356

Python を使用するstrftime場合、日付が 10 日より前の場合、最初の 0 を削除する方法はありますか? そう01です1か?そのためのものが見つかりません%か?

ありがとう!

4

19 に答える 19

702

実際、私は同じ問題を抱えていて%、文字と文字の間にハイフンを追加すると、先頭のゼロを削除できることに気付きました。

たとえば%Y/%-m/%-d

これは Unix (Linux、OS X) でのみ機能し、Windows (Cygwin を含む) では機能しません。Windows では#、たとえばを使用します%Y/%#m/%#d

于 2010-01-15T16:38:41.417 に答える
208

formatPython2.6以降のメソッドの出現により、この種のことができます。

>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'

おそらく元の質問の範囲を超えていますが、より興味深い形式については、次のようなことができます。

>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'

そして python3.6 の時点で、これはインラインでフォーマットされた文字列として表現できます:

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dt = datetime.datetime.now()
>>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}'
'Monday August 29, 2016'
于 2013-04-19T04:48:02.993 に答える
45

http://docs.python.org/library/time.htmlによると、一部のプラットフォームでは と文字の間の幅と精度の指定%(月の日を表す「d」など)がサポートされている場合がありますが、これは間違いなく移植性がありません。ソリューション (たとえば、私の Mac では動作しません;-)。おそらく、文字列の置換 (または、本当に厄介な形式の場合は RE) を使用して、それを修正できますか? 例えば:strftime

>>> y
(2009, 5, 7, 17, 17, 17, 3, 127, 1)
>>> time.strftime('%Y %m %d', y)
'2009 05 07'
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ')
'2009 5 7'
于 2009-05-25T00:22:43.277 に答える
36

GNUCstrftime()ライブラリでサポートされている修飾子のドキュメントは次のとおりです。(人々が前に言ったように、それは持ち運びできないかもしれません。)あなたが興味を持っているかもしれません:

  • %e代わりに%d、月の日の先行ゼロをスペースに置き換えます

それは私のPython(Linux上)で動作します。それがあなたのものでうまくいくかどうかはわかりません。

于 2009-05-25T18:13:36.383 に答える
36
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
于 2011-05-05T15:46:24.267 に答える
24

Windows では、「%#m/%#d/%Y %#I:%M:%S %p」のように「#」を追加します。

参考: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

于 2015-07-31T14:12:53.607 に答える
10

Django テンプレートの日付フォーマット フィルターはすばやく簡単に使用できます。先頭のゼロを取り除きます。Django モジュールをインポートしてもかまわない場合は、チェックしてみてください。

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

from django.template.defaultfilters import date as django_date_filter
print django_date_filter(mydate, 'P, D M j, Y')    
于 2009-09-15T16:31:23.653 に答える
9

以下を見てください-

>>> from datetime import datetime
>>> datetime.now().strftime('%d-%b-%Y')
>>> '08-Oct-2011'
>>> datetime.now().strftime('%-d-%b-%Y')
>>> '8-Oct-2011'
>>> today = datetime.date.today()
>>> today.strftime('%d-%b-%Y')
>>> print(today)
于 2011-10-08T18:15:59.780 に答える
5

%dを使用して整数に変換できるため、int()先頭の 0 が自動的に削除され、整数になります。その後、 を使用して文字列に戻すことができますstr()

于 2010-07-19T23:33:10.453 に答える
2

Python は実際にはプラットフォーム上で C 言語strftime(3)関数を呼び出すだけなので、先頭のゼロを制御するために使用できるフォーマット文字が存在する可能性があります。見てみman strftimeてください。しかし、もちろん、Python のマニュアルで指摘されているように、結果は移植可能ではありません。:-)

代わりにandやのdatetimeような属性を持つ新しいスタイルのオブジェクトを使用してみて、先行ゼロの制御をサポートする演算子の通常の強力な書式設定を使用します。詳細については、 http://docs.python.org/library/datetime.htmlを参照してください。さらに良いことに、Python に演算子がある場合はそれを使用し、さらに最新のものにしてください。数値の書式オプションも多数あります。http://docs.python.org/library/string.html#string-formattingを参照してください。t.yeart.montht.day%"".format()

于 2009-05-25T00:23:21.323 に答える
2

アレックスの方法に基づいて、これは文字列の開始とスペースの後の両方のケースで機能します。

re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")

これはクロスプラットフォームであり、strftime を使い続けることができるため ("November" や "Monday" などを取得するため)、.format や %-d よりも気に入っています。

于 2014-11-17T18:19:31.760 に答える
2

古い質問ですが、strftime で %l (小文字の L) が機能しました。ただし、私が見つけた Python のドキュメントには記載されていないため、これはすべての人に適しているとは限りません。

于 2016-07-29T15:29:35.107 に答える
2
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
于 2017-02-01T22:53:34.493 に答える
1

Python 3.6+:

from datetime import date
today = date.today()
text = "Today it is " + today.strftime(f"%A %B {today.day}, %Y")
于 2020-12-03T05:36:03.467 に答える