Antworten:
Eigentlich hatte ich das gleiche Problem und mir wurde klar, dass Sie %
die führende Null entfernen können , wenn Sie einen Bindestrich zwischen dem und dem Buchstaben einfügen.
Zum Beispiel %Y/%-m/%-d
.
Dies funktioniert nur unter Unix (Linux, OS X), nicht unter Windows (einschließlich Cygwin). Unter Windows würden Sie #
z %Y/%#m/%#d
.
ValueError: '-' is a bad directive in format '%b %-d, %Y'
. OSX, Python 2.7.
%#d
würde das gleiche unter Windows tun
Wir können so etwas mit dem Aufkommen der format
Methode seit Python2.6 tun:
>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'
Obwohl dies möglicherweise den Rahmen der ursprünglichen Frage sprengt, können Sie für interessantere Formate Dinge tun wie:
>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'
Ab Python3.6 kann dies als inline formatierte Zeichenfolge ausgedrückt werden :
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')
, die ergibt (jetzt im englischen Gebietsschema) Tuesday October 07, 2014
.
__format__
Hook angibt , mit dem Sie solche Dinge schreiben können.
'{dt.hour}'
eine 24-Stunden-Uhr verwendet wird :(. Wenn Sie die zweite Option verwenden, können Sie immer noch unter '{%#I}'
Windows und '{%-I}'
Unix arbeiten.
Einige Plattformen unterstützen %
laut http://docs.python.org/library/time.html möglicherweise die Angabe der Breite und Genauigkeit zwischen und dem Buchstaben (z. B. 'd' für den Tag des Monats) - aber es ist definitiv nicht portierbar Lösung (zB funktioniert nicht auf meinem Mac ;-). Vielleicht können Sie nach dem einen String-Ersatz (oder RE, für ein wirklich böses Format) verwenden, um das strftime
zu beheben? z.B:
>>> 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'
Hier finden Sie die Dokumentation der Modifikatoren, die von strftime()
der GNU C-Bibliothek unterstützt werden. (Wie die Leute bereits sagten, ist es möglicherweise nicht tragbar.) Für Sie könnte Folgendes von Interesse sein:
%e
Stattdessen %d
wird die führende Null am Tag des Monats durch ein Leerzeichen ersetztEs funktioniert auf meinem Python (unter Linux). Ich weiß nicht, ob es bei Ihnen funktionieren wird.
>>> 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','')
? Tu es einfach .replace('X0', '')
und es wird gut.
Fügen Sie unter Windows ein '#' hinzu, wie in '% # m /% # d /% Y% # I:% M:% S% p'.
Als Referenz: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
ziemlich spät zur Party, %-d
arbeitet aber an meinem Ende.
datetime.now().strftime('%B %-d, %Y')
produziert so etwas wie "5. November 2014"
Prost :)
ValueError: Invalid format string
in meinem Windows-System.
Ich finde den Datumsfilterfilter für Django-Vorlagen schnell und einfach. Führende Nullen werden entfernt. Wenn es Ihnen nichts ausmacht, das Django-Modul zu importieren, probieren Sie es aus.
http://docs.djangoproject.com/de/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()
Schauen Sie sich -
unten an:
>>> 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)
Wenn %d
Sie mit in eine Ganzzahl konvertieren können, int()
wird die führende 0 automatisch entfernt und eine Ganzzahl. Sie können dann mit zurück in einen String konvertieren str()
.
einfach so verwenden replace
:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
es wird ausgegeben:
'2017/7/21'
Die Verwendung von "% -d" ist beispielsweise auch zwischen verschiedenen Versionen desselben Betriebssystems nicht portierbar. Eine bessere Lösung wäre, die Datumskomponenten einzeln zu extrahieren und zwischen datumsspezifischen Formatierungsoperatoren und Datumsattributzugriff für jede Komponente zu wählen.
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
Da Python wirklich nur die C- strftime(3)
Sprachfunktion auf Ihrer Plattform aufruft , gibt es möglicherweise Formatzeichen, mit denen Sie die führende Null steuern können. versuche man strftime
es dir anzusehen. Aber natürlich ist das Ergebnis nicht portierbar, wie das Python-Handbuch Sie daran erinnern wird. :-)
Ich würde versuchen, stattdessen ein datetime
Objekt im neuen Stil zu verwenden, das Attribute wie t.year
und t.month
und hat t.day
, und diese durch die normale, leistungsstarke Formatierung des %
Operators zu setzen, die die Steuerung führender Nullen unterstützt. Weitere Informationen finden Sie unter http://docs.python.org/library/datetime.html . Besser noch, verwenden Sie den "".format()
Operator, wenn Ihr Python ihn hat, und seien Sie noch moderner. Es gibt auch viele Formatoptionen für Zahlen. Siehe: http://docs.python.org/library/string.html#string-formatting .
Basierend auf Alex 'Methode funktioniert dies sowohl für den Fall des String-Starts als auch für den Fall nach dem Leerzeichen:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
Ich mag das besser als .format oder% -d, weil dies plattformübergreifend ist und es mir ermöglicht, strftime weiter zu verwenden (um Dinge wie "November" und "Montag" zu erhalten).
Alte Frage, aber% l (Kleinbuchstabe L) hat in der Zwischenzeit für mich funktioniert: Dies funktioniert jedoch möglicherweise nicht für alle, da es nicht in der Python-Dokumentation aufgeführt ist, die ich gefunden habe
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'
mit Python 3.5