Gibt es bei Verwendung von Python strftime
eine Möglichkeit, die erste 0 des Datums zu entfernen, wenn sie vor der 10. liegt, d. H. so 01
ist 1
? Kannst du kein %
Ding dafür finden?
Vielen Dank!
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 tunWir können so etwas mit dem Aufkommen der
format
Methode seit Python2.6 tun:Obwohl dies möglicherweise den Rahmen der ursprünglichen Frage sprengt, können Sie für interessantere Formate Dinge tun wie:
Ab Python3.6 kann dies als inline formatierte Zeichenfolge ausgedrückt werden :
quelle
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 dasstrftime
zu beheben? z.B:quelle
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.
quelle
%-d
oben funktioniert dies unter OS X 10.8.5 mit Python 2.7.2, jedoch nicht unter Windows 7 Pro 64-Bit mit Python 2.7.3.quelle
.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
quelle
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 :)
quelle
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
quelle
import django.conf
django.conf.settings.configure()
Schauen Sie sich
-
unten an:quelle
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 konvertierenstr()
.quelle
einfach so verwenden
replace
:(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
es wird ausgegeben:
quelle
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.
quelle
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. versucheman 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 wiet.year
undt.month
und hatt.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 .quelle
Basierend auf Alex 'Methode funktioniert dies sowohl für den Fall des String-Starts als auch für den Fall nach dem Leerzeichen:
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).
quelle
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
quelle
quelle
ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'
mit Python 3.5