web-dev-qa-db-ja.com

Python strftime-先行ゼロなしの日付?

Python strftimeを使用する場合、日付の最初の0が10日より前であれば削除する方法があります。 011ですか?そのための%thingyが見つかりませんか?

ありがとう!

228
Solihull

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

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

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

495
Ryan

Python2.6以降では format メソッドの登場により、この種のことが可能になりました。

>>> 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'
180
mgilson

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

>>> 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'
37
Alex Martelli
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
26
gdw2

ここ は、GNU Cライブラリのstrftime()でサポートされている修飾子のドキュメントです。 (先ほど言ったように、ポータブルではないかもしれません。)あなたにとって興味深いのは:

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

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

21
newacct

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

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

16
Chad Kennedy

パーティーにかなり遅れましたが、%-dは私の側で機能します。

datetime.now().strftime('%B %-d, %Y')"November 5、2014"のようなものを生成します

乾杯:)

15
bonbon.langes

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')    
10
mcqwerty

-以下をご覧ください。

>>> 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)
6
ptronico

次のようにreplaceを使用します。

(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")

出力されます:

'2017/7/21'

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

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

これはクロスプラットフォームであり、strftimeを使用し続けることができる(「11月」や「月曜日」のようなものを取得する)ため、.formatや%-dよりもこの方が好きです。

2
mmitchell

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

2

古い質問ですが、%l(小文字のL)がstrftimeで機能しました。ただし、これは、私が見つけたPythonドキュメントにリストされていないため、すべての人に機能しない可能性があります

1
OliverRadini
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
1
user7503128

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

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

1
Brandon Rhodes

%dは、Python 3.6.5(および、できれば後続のバージョン)で両方をサポートします(先頭に0が付き、なし)。

enter image description here

0
Kshitij

たとえば、「%-d」を使用すると、同じOSの異なるバージョン間でも移植できません。より良い解決策は、日付コンポーネントを個別に抽出し、日付固有のフォーマット演算子と各コンポーネントの日付属性アクセスから選択することです。

e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
0
Chris Chewa