Das WARUM: Daten sind Objekte
In Python sind Daten Objekte. Wenn Sie sie manipulieren, manipulieren Sie daher Objekte, keine Zeichenketten oder Zeitstempel.
Jedes Objekt in Python hat ZWEI String-Repräsentationen:
-
Die reguläre Darstellung, die von print
kann mit der Funktion str()
Funktion. Es ist meist das gängigste für den Menschen lesbare Format und wird zur Vereinfachung der Anzeige verwendet. Also str(datetime.datetime(2008, 11, 22, 19, 53, 42))
gibt Ihnen '2008-11-22 19:53:42'
.
-
Die alternative Darstellung, die verwendet wird, um die Art des Objekts (als Daten) darzustellen. Sie kann mit der Option repr()
Funktion und ist praktisch, um zu wissen, welche Art von Daten Sie während der Entwicklung oder Fehlersuche bearbeiten. repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
gibt Ihnen 'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.
Wenn Sie das Datum mit print
verwendet es str()
damit Sie eine schöne Datumsfolge sehen können. Aber wenn Sie gedruckt haben mylist
haben Sie eine Liste von Objekten gedruckt und mit Python versucht, die Datenmenge darzustellen, indem Sie repr()
.
Das Wie: Was wollen Sie damit machen?
Nun, wenn Sie Daten manipulieren, verwenden Sie die Datumsobjekte die ganze Zeit über. Sie haben tausende von nützlichen Methoden und die meisten der Python-API erwarten, dass Datumsangaben Objekte sind.
Wenn Sie sie anzeigen möchten, verwenden Sie einfach str()
. In Python ist es eine gute Praxis, alles explizit zu casten. Wenn es also an der Zeit ist, zu drucken, erhalten Sie eine String-Repräsentation Ihres Datums mit str(date)
.
Eine letzte Sache. Als Sie versucht haben, die Daten zu drucken, haben Sie mylist
. Wenn Sie ein Datum drucken wollen, müssen Sie die Datumsobjekte drucken, nicht ihren Container (die Liste).
Sie möchten z. B. alle Daten in einer Liste drucken:
for date in mylist :
print str(date)
Beachten Sie, dass in diesem speziellen Fall können Sie auch weglassen str()
denn der Druck wird ihn für Sie verwenden. Aber es sollte nicht zur Gewohnheit werden :-)
Praktischer Fall, unter Verwendung Ihres Codes
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
Erweiterte Datumsformatierung
Datumsangaben haben eine Standarddarstellung, aber Sie möchten sie vielleicht in einem bestimmten Format ausgeben. In diesem Fall können Sie eine benutzerdefinierte Zeichenkettendarstellung erhalten, indem Sie die strftime()
Methode.
strftime()
erwartet ein Zeichenkettenmuster, das angibt, wie Sie Ihr Datum formatieren möchten.
E.G :
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
Alle Buchstaben nach einem "%"
ein Format für etwas darstellen:
%d
ist die Tagesnummer (2 Ziffern, ggf. mit vorangestellten Nullen)
%m
ist die Monatsnummer (2 Ziffern, ggf. mit vorangestellten Nullen)
%b
ist die Monatsabkürzung (3 Buchstaben)
%B
ist der vollständige Monatsname (Buchstaben)
%y
ist die abgekürzte Jahreszahl (die letzten 2 Ziffern)
%Y
ist die volle Jahreszahl (4 Ziffern)
usw.
Werfen Sie einen Blick auf die offizielle Dokumentation o McCutchen's Schnellreferenz man kann sie nicht alle kennen.
Desde PEP3101 Jedes Objekt kann sein eigenes Format haben, das automatisch von der Methode format of any string verwendet wird. Im Fall von datetime ist das Format das gleiche, das in strftime. Sie können also das Gleiche wie oben tun, wie folgt:
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
Der Vorteil dieser Form ist, dass Sie gleichzeitig auch andere Objekte umwandeln können.
Mit der Einführung von Formatierte String-Literale (seit Python 3.6, 2016-12-23) kann dies geschrieben werden als
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
Lokalisierung
Daten können sich automatisch an die lokale Sprache und Kultur anpassen, wenn man sie richtig einsetzt, aber das ist etwas kompliziert. Vielleicht für eine andere Frage auf SO(Stack Overflow) ;-)
16 Stimmen
Die kurze Antwort: Durch die Anwendung
str()
(zu jedem Element der Liste), denn das ist genau das, wasprint
stillschweigend mit Ihrem Solo gemachttoday
Objekt.1 Stimmen
stackoverflow.com/a/39890902/1900645