Gibt es ein Format zum Drucken von Python-Datumsangaben, bei dem Datums- und Uhrzeitangaben nicht mit Nullen aufgefüllt werden?
Format, das ich jetzt verwende:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
Ergebnis: 29.02.2012 17:03
Gewünscht: 29.02.2012 17:03 Uhr
Welches Format würde den Monat als "2" anstelle von "02" und die Zeit als "17:03 Uhr" anstelle von "05: 03PM" darstellen?
python
datetime
formatting
zero-pad
Yarin
quelle
quelle
.lstrip("0")
, die führende Null loszuwerden.Die andere Alternative, um den oben genannten Null-Aspekt "alles oder nichts" zu vermeiden, besteht darin, ein Minus vor den Feldtyp zu setzen:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
Dann das: '10.10.2015 03:00 Uhr '
Wird: '10.10.2015 03:00 Uhr '
Falls gewünscht, können Sie optional ein Minus vor dem Tag platzieren.
Bearbeiten: Die Minus-Funktion stammt aus der GNU C-Bibliothek („glibc“), wie in der Linux-Strftime-Manpage unter „Glibc-Notizen“ erwähnt.
quelle
date.__format__
odertime.strftime
, docs.python.org/3/library/... und docs.python.org/3.8/library/time.html#time.strftime bzw.Das neue Formatierungssystem für Zeichenfolgen bietet eine Alternative zu
strftime
. Es ist gut lesbar - in der Tat könnte esstrftime
aus diesem Grund vorzuziehen sein . Ganz zu schweigen von der Tatsache, dass es kein Zero-Pad gibt:>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now()) '3/1/2012'
Da Sie wahrscheinlich keine Auffüllung im Minutenfeld wünschen, können Sie dies tun:
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now) '3/1/2012 20:00'
Wenn Sie "reguläre" Zeit anstelle von "militärischer" Zeit wünschen, können Sie auch weiterhin die Standardspezifizierer verwenden
strftime
. Für unsere Zweckestrftime
wird zweckmäßigerweise ein Code für die 12-Stunden-Zeit bereitgestellt, der mit einem Leerzeichen anstelle einer führenden Null aufgefüllt ist:'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now) '4/4/2014 6:00PM'
Dies wird leider etwas weniger lesbar. Und wie @mlissner betont,
strftime
wird es auf einigen (allen?) Plattformen für Daten vor 1900 fehlschlagen.quelle
"{0.day} {0:%B %Y}".format(d)
was Ihnen'2 August 2013'
als Tag dieses Kommentars geben würde :)Akzeptierte Antwort keine richtige Lösung (IMHO) Die richtigen dokumentierten Methoden:
Unter Linux wird "#" durch "-" ersetzt:
% -d,% -H,% -I,% -j,% -m,% -M,% -S,% -U,% -w,% -W,% -y,% -Y
In Windows wird "-" durch "#" ersetzt:
% # d,% # H,% # I,% # j,% # m,% # M,% # S,% # U,% # w,% # W,% # y,% # Y.
#Linux mydatetime.strftime('%-m/%d/%Y %-I:%M%p') # Windows mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
Quelle: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
Wie von Sagneta angegeben: Der # Hash-Trick unter Windows ist nur für native ausführbare Python-Dateien verfügbar. Dies funktioniert nicht für Cygwin-basierte Python-Implementierungen.
quelle
Gute Antwort von Chris Freeman unter Linux.
Unter Windows ist es:
mydate.strftime('%#m/%#d/%Y')
Dachte, das könnte helfen.
quelle
"% l" (das ist ein Kleinbuchstabe L) arbeitet für die Stunde (anstelle von "% I"). Ich weiß das nur aus einer anderen Antwort hier
Python strftime - Datum ohne führende 0?
Leider haben sie nicht den Code für die anderen Elemente eines Datums / einer Uhrzeit.
quelle