Yanıtlar:
Aslında aynı sorunu yaşadım ve fark ettim ki, %
ile harf arasına bir tire eklerseniz baştaki sıfırı kaldırabilirsiniz.
Örneğin %Y/%-m/%-d
.
Bu yalnızca Unix (Linux, OS X) üzerinde çalışır, Windows (Cygwin dahil) üzerinde çalışmaz. Windows'ta #
, örneğin;%Y/%#m/%#d
;
ValueError: '-' is a bad directive in format '%b %-d, %Y'
. OSX, Python 2.7.
%#d
aynısını Windows'ta yapar
Bu tür bir şeyi, format
python2.6'dan bu yana yöntemin ortaya çıkışı ile yapabiliriz :
>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'
Belki de orijinal sorunun kapsamı dışında olsa da, daha ilginç formatlar için aşağıdakileri yapabilirsiniz:
>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'
Ve python3.6'dan itibaren, bu satır içi biçimlendirilmiş dize olarak ifade edilebilir :
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')
(şimdi, İngilizce yerel ayarlarında) gibi metinsel temsili kullanmak istiyorsanız tek başına çalışmaz Tuesday October 07, 2014
.
__format__
böyle şeyler yazmanıza izin veren çok ilginç bir kanca belirttiği ortaya çıkıyor .
'{dt.hour}'
24 saatlik bir saat kullanmasıdır :(. İkinci seçeneği kullanmak sizi hala '{%#I}'
Windows ve '{%-I}'
Unix'te kullanmaya geri getirir .
Bazı platformlar, http://docs.python.org/library/time.html%
adresine göre ve ay arasındaki genişlik ve kesinlik özelliklerini destekleyebilir (ayın günü için 'd' gibi) - ancak kesinlikle taşınabilir değil çözümü (örn. Mac ;-) üzerinde çalışmıyor. Belki bunu gidermek için bir dize değiştirme (veya RE, gerçekten kötü bir format için) kullanabilirsiniz? Örneğin: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'
İştestrftime()
GNU C kütüphanesinde desteklenen değiştiricilerin belgeleri . (Daha önce söylediği gibi, taşınabilir olmayabilir.) İlginizi çekebilir:
%e
yerine %d
ayın başındaki sıfırı bir boşlukla değiştirecekPython'umda (Linux'ta) çalışır. Senin üzerinde çalışıp çalışmayacağını bilmiyorum.
%-d
yukarıdaki , Python 2.7.2 ile OS X 10.8.5 bu eserler, ancak Windows Python 2.7.3 ile 7 Pro 64 bit.
>>> 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','')
? Sadece yap .replace('X0', '')
ve iyi olacak.
Windows'ta, '% # m /% # d /% Y% # I:% M:% S% p' gibi bir '#' ekleyin
Referans için: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
partiye oldukça geç ama %-d
sonuna kadar çalışıyor.
datetime.now().strftime('%B %-d, %Y')
gibi bir şey üretir "5 Kasım 2014"
alkış :)
ValueError: Invalid format string
Windows sistemimde.
Django şablon tarih formatlama filtresini hızlı ve kolay buluyorum. Baştaki sıfırları çıkarır. Django modülünü içe aktarmanın bir sakıncası yoksa modülü kontrol edin.
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()
Körüğe bir göz atın -
:
>>> 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)
sadece şöyle kullanın replace
:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
çıktı olacak:
'2017/7/21'
İçin %d
kullanmakta tamsayıya dönüştürmek int()
o zaman otomatik olarak 0 lider çıkarıp tamsayı olur edeceğiz. Sonra kullanarak dizeye geri dönüştürebilirsiniz str()
.
örneğin, "% -d" kullanmak aynı işletim sisteminin farklı sürümleri arasında bile taşınabilir değildir. Tarih bileşenlerini tek tek ayıklamak ve her bileşenin tarihe özgü biçimlendirme işleçleri ile tarih özniteliği erişimi arasında seçim yapmak daha iyi bir çözüm olabilir.
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
Python gerçekten strftime(3)
platformunuzdaki C dili işlevini çağırdığı için , baştaki sıfırı kontrol etmek için kullanabileceğiniz biçim karakterleri olabilir; denemek man strftime
ve bir göz atın. Ancak, elbette, Python kılavuzu size hatırlatacağı için sonuç taşınabilir olmayacaktır. :-)
Yeni bir tarzı kullanmayı deneyin olacağını datetime
benzer özelliklere sahip olan, bunun yerine nesne t.year
ve t.month
ve t.day
ve yoluyla bu koymak, normal, yüksek güçlü biçimlendirmesi de %
lider sıfırların destek kontrolünü yapar operatörü. Ayrıntılar için http://docs.python.org/library/datetime.html adresine bakın. Daha da iyisi, "".format()
Python'unuz varsa operatörü kullanın ve daha modern olun; sayılar için de birçok biçim seçeneği vardır. Bkz . Http://docs.python.org/library/string.html#string-formatting .
Alex'in yöntemine dayanarak, bu hem dize başlangıcı hem de boşluk sonrası durumlar için işe yarayacaktır:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
Bunu .format veya% -d'den daha çok seviyorum çünkü bu çapraz platform ve strftime ("Kasım" ve "Pazartesi" gibi şeyler almak için) kullanmaya devam etmeme izin veriyor.
Eski soru, ama% l (küçük harf L) benim için zor işlerde çalıştı: Bu, bulduğum Python belgelerinde listelenmediği için herkes için işe yaramayabilir.
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 kullanarak