Python を使用するstrftime
場合、日付が 10 日より前の場合、最初の 0 を削除する方法はありますか? そう01
です1
か?そのためのものが見つかりません%
か?
ありがとう!
実際、私は同じ問題を抱えていて%
、文字と文字の間にハイフンを追加すると、先頭のゼロを削除できることに気付きました。
たとえば%Y/%-m/%-d
。
これは Unix (Linux、OS X) でのみ機能し、Windows (Cygwin を含む) では機能しません。Windows では#
、たとえばを使用します%Y/%#m/%#d
。
format
Python2.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'
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'
GNUCstrftime()
ライブラリでサポートされている修飾子のドキュメントは次のとおりです。(人々が前に言ったように、それは持ち運びできないかもしれません。)あなたが興味を持っているかもしれません:
%e
代わりに%d
、月の日の先行ゼロをスペースに置き換えますそれは私のPython(Linux上)で動作します。それがあなたのものでうまくいくかどうかはわかりません。
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
Windows では、「%#m/%#d/%Y %#I:%M:%S %p」のように「#」を追加します。
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)
%d
を使用して整数に変換できるため、int()
先頭の 0 が自動的に削除され、整数になります。その後、 を使用して文字列に戻すことができますstr()
。
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.year
t.month
t.day
%
"".format()
アレックスの方法に基づいて、これは文字列の開始とスペースの後の両方のケースで機能します。
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
これはクロスプラットフォームであり、strftime を使い続けることができるため ("November" や "Monday" などを取得するため)、.format や %-d よりも気に入っています。
古い質問ですが、strftime で %l (小文字の L) が機能しました。ただし、私が見つけた Python のドキュメントには記載されていないため、これはすべての人に適しているとは限りません。
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
Python 3.6+:
from datetime import date
today = date.today()
text = "Today it is " + today.strftime(f"%A %B {today.day}, %Y")