Python strftime
を使用する場合、日付の最初の0が10日より前であれば削除する方法があります。 01
は1
ですか?そのための%
thingyが見つかりませんか?
ありがとう!
実際、同じ問題があり、%
と文字の間にハイフンを追加すると、先頭のゼロを削除できることに気付きました。
たとえば、%Y/%-m/%-d
。
これはUnix(Linux、OS X)でのみ機能し、Windows(Cygwinを含む)では機能しません。 Windowsでは、#
を使用します。 %Y/%#m/%#d
。
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'
一部のプラットフォームでは、 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'
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
ここ は、GNU Cライブラリのstrftime()
でサポートされている修飾子のドキュメントです。 (先ほど言ったように、ポータブルではないかもしれません。)あなたにとって興味深いのは:
%e
の代わりに%d
は、月の日の先頭のゼロをスペースに置き換えます私のPython(Linux上)で動作します。私はそれがあなたのものでうまくいくかどうかわかりません。
Windowsでは、「%#m /%#d /%Y%#I:%M:%S%p」のように「#」を追加します
パーティーにかなり遅れましたが、%-d
は私の側で機能します。
datetime.now().strftime('%B %-d, %Y')
は"November 5、2014"のようなものを生成します
乾杯:)
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')
-
以下をご覧ください。
>>> 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)
次のように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よりもこの方が好きです。
%d
の場合、int()
を使用して整数に変換すると、先頭の0が自動的に削除され、整数になります。その後、str()
を使用して文字列に変換できます。
古い質問ですが、%l(小文字のL)がstrftimeで機能しました。ただし、これは、私が見つけたPythonドキュメントにリストされていないため、すべての人に機能しない可能性があります
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
Pythonは実際にはプラットフォームでC言語のstrftime(3)
関数を呼び出すだけなので、先頭のゼロを制御するために使用できるフォーマット文字がある可能性があります。 man strftime
を試してみてください。しかし、もちろん、Pythonマニュアルが思い出させるので、結果は移植性がありません。 :-)
代わりにt.year
やt.month
やt.day
のような属性を持つ新しいスタイルのdatetime
オブジェクトを使用してみて、通常の強力な書式設定を行います%
演算子。先行ゼロの制御をサポートします。詳細については、 http://docs.python.org/library/datetime.html を参照してください。さらに良いのは、Pythonに含まれている場合は"".format()
演算子を使用し、さらに最新のものにすることです。数字の形式オプションも多数あります。 http://docs.python.org/library/string.html#string-formatting を参照してください。
たとえば、「%-d」を使用すると、同じOSの異なるバージョン間でも移植できません。より良い解決策は、日付コンポーネントを個別に抽出し、日付固有のフォーマット演算子と各コンポーネントの日付属性アクセスから選択することです。
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)