回答:
実際に同じ問題があり、間にハイフンを追加すると %
と文字のすると、先行ゼロを削除できることがわかりました。
例えば %Y/%-m/%-d
。
これはUnix(Linux、OS X)でのみ機能し、Windows(Cygwinを含む)では機能しません。Windowsでは#
、たとえばを使用します%Y/%#m/%#d
。
ValueError: '-' is a bad directive in format '%b %-d, %Y'
。OSX、Python 2.7。
%#d
Windowsでも同じようになります
この種のことは、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'
time.strftime('%A %B %d, %Y')
、のようなテキスト表現を使用したい場合、単独では機能しませんTuesday October 07, 2014
。
__format__
そのようなものを書くことができる非常に興味深いフックを指定していることがわかります。
'{dt.hour}'
24時間時計を使用しています:(第二の選択肢はまだ戻って使用することができます使用する。'{%#I}'
Windows上および'{%-I}'
Unix上で。
一部のプラットフォームでは、幅との間の高精度仕様サポートすること%
による、および(例えば、月の日のための「D」のように)手紙をhttp://docs.python.org/library/time.html -それは間違いなく非ポータブルです解決策(私の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'
以下は、strftime()
GNU Cライブラリでサポートされている修飾子のドキュメントです。(以前に言ったように、それはポータブルではないかもしれません。)あなたにとって興味深いのは:
%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'
.replace('X0','X').replace('X','')
ですか?やれ.replace('X0', '')
ばいいよ。
Windowsでは、「%#m /%#d /%Y%#I:%M:%S%p」のように「#」を追加します
パーティーにはかなり遅れますが、%-d
私の側でうまくいきます。
datetime.now().strftime('%B %-d, %Y')
のようなものを生成します 「2014年11月5日」の
乾杯:)
ValueError: Invalid format string
私のWindowsシステムで。
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')
import django.conf
django.conf.settings.configure()
以下を-
ご覧ください。
>>> 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'
以下のために%d
あなたが使用して整数に変換することができint()
、それは自動的に0をリード削除し、整数になります。その後、を使用して文字列に戻すことができますstr()
。
Pythonは実際にはstrftime(3)
プラットフォーム上のC言語関数を呼び出すだけなので、先行ゼロを制御するために使用できるフォーマット文字がある可能性があります。試すman strftime
と見てみましょう。しかし、もちろん、Pythonのマニュアルで説明されているように、結果を移植することはできません。:-)
datetime
代わりにt.year
and t.month
やのような属性を持つ新しいスタイルのオブジェクトを使用してみて、先行ゼロの制御をサポートt.day
する通常の強力な%
演算子の書式設定にそれらを適用します。詳細については、http://docs.python.org/library/datetime.htmlを参照してください。さらに良い"".format()
ことに、Pythonに演算子がある場合は演算子を使用し、さらに最新のものにします。数値の書式オプションもたくさんあります。参照:http : //docs.python.org/library/string.html#string-formatting。
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'
Python 3.5を使用