430 Stimmen

Python strftime - Datum ohne führende 0?

Bei Verwendung von Python strftime Gibt es eine Möglichkeit, die erste 0 des Datums zu entfernen, wenn es vor dem 10. liegt, d.h. 01 es 1 ? Kann nicht finden ein % Dingsbums dafür?

Gracias.

821voto

Ryan Punkte 7195

Ich hatte das gleiche Problem und habe festgestellt, dass, wenn man einen Bindestrich zwischen die % und dem Buchstaben, können Sie die führende Null entfernen.

Zum Beispiel %Y/%-m/%-d .

Dies funktioniert nur unter Unix (Linux, OS X), nicht unter Windows (einschließlich Cygwin). Unter Windows würden Sie Folgendes verwenden # z.B. %Y/%#m/%#d .

216voto

mgilson Punkte 280928

Wir können diese Art von Dingen mit der Einführung des format Methode seit python2.6:

>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'

Auch wenn es vielleicht den Rahmen der ursprünglichen Frage sprengt, kann man für interessantere Formate Dinge tun wie:

>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'

Und ab Python 3.6 kann dies als eine Inline-formatierte Zeichenkette :

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'

47voto

Alex Martelli Punkte 805329

Einige Plattformen unterstützen möglicherweise die Angabe von Breite und Genauigkeit zwischen % und dem Buchstaben (z. B. 'd' für den Tag des Monats), gemäß http://docs.python.org/library/time.html -- aber es ist definitiv eine nicht-portable Lösung (z.B. funktioniert sie nicht auf meinem Mac;-). Vielleicht können Sie eine Zeichenfolge ersetzen (oder RE, für wirklich böse Format) nach der strftime um dem abzuhelfen? 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'

42voto

newacct Punkte 114757

Hier ist die Dokumentation der Modifikatoren, die von strftime() in der GNU C-Bibliothek. (Wie schon gesagt wurde, könnte es nicht portabel sein.) Von Interesse für Sie könnte sein:

  • %e anstelle von %d ersetzt die führende Null im Tag des Monats durch ein Leerzeichen

Es funktioniert auf meinem Python (unter Linux). Ich weiß nicht, ob es auf Ihrem funktionieren wird.

38voto

gdw2 Punkte 6802
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X