Das ist mein Code:
import datetime
today = datetime.date.today()
print(today)
Dies druckt: 2008-11-22
was genau das ist, was ich will.
Aber ich habe eine Liste, an die ich diese anhänge, und dann wird plötzlich alles "wackelig". Hier ist der Code:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)
Dies druckt Folgendes:
[datetime.date(2008, 11, 22)]
Wie kann ich nur ein einfaches Date bekommen 2008-11-22
?
str()
(auf jedes Element der Liste), denn genau das hatprint
implizit mit Ihrem Solo-today
Objekt geschehen.Antworten:
Das WARUM: Daten sind Objekte
In Python sind Datumsangaben Objekte. Wenn Sie sie manipulieren, manipulieren Sie daher Objekte, keine Zeichenfolgen, keine Zeitstempel oder irgendetwas.
Jedes Objekt in Python hat ZWEI Zeichenfolgendarstellungen:
Die reguläre Darstellung, die von "print" verwendet wird, kann mit der
str()
Funktion abgerufen werden . Es ist meistens das am häufigsten lesbare Format und wird verwendet, um die Anzeige zu vereinfachen. Sostr(datetime.datetime(2008, 11, 22, 19, 53, 42))
gibt es dir'2008-11-22 19:53:42'
.Die alternative Darstellung, die zur Darstellung der Objektnatur (als Daten) verwendet wird. Es kann mithilfe der
repr()
Funktion verwendet werden und ist praktisch, um zu wissen, welche Art von Daten Sie während der Entwicklung oder des Debuggens bearbeiten.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
gibt dir'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.Was passiert ist, ist, dass wenn Sie das Datum mit "Drucken" gedruckt haben, es verwendet wurde,
str()
damit Sie eine schöne Datumszeichenfolge sehen konnten. Wenn Sie jedoch gedruckt habenmylist
, haben Sie eine Liste von Objekten gedruckt , und Python hat versucht, den Datensatz mithilfe von darzustellenrepr()
.Das Wie: Was willst du damit machen?
Wenn Sie Datumsangaben bearbeiten, verwenden Sie die Datumsobjekte weiterhin. Sie haben Tausende nützlicher Methoden und die meisten Python-APIs erwarten, dass Daten Objekte sind.
Wenn Sie sie anzeigen möchten, verwenden Sie einfach
str()
. In Python empfiehlt es sich, alles explizit zu übertragen. Wenn es also Zeit zum Drucken ist, erhalten Sie eine Zeichenfolgendarstellung Ihres Datums mitstr(date)
.Eine letzte Sache. Beim Versuch, die Daten zu drucken, haben Sie gedruckt
mylist
. Wenn Sie ein Datum drucken möchten, müssen Sie die Datumsobjekte drucken, nicht ihren Container (die Liste).ZB möchten Sie das gesamte Datum in einer Liste drucken:
Beachten Sie, dass Sie in diesem speziellen Fall sogar weglassen können,
str()
da der Druck dies für Sie verwendet. Aber es sollte keine Gewohnheit werden :-)Praktischer Fall mit Ihrem Code
Erweiterte Datumsformatierung
Daten haben eine Standarddarstellung, aber Sie können sie in einem bestimmten Format drucken. In diesem Fall können Sie mithilfe der
strftime()
Methode eine benutzerdefinierte Zeichenfolgendarstellung abrufen.strftime()
erwartet ein Zeichenfolgenmuster, das erklärt, wie Sie Ihr Datum formatieren möchten.Z.B :
Alle Buchstaben nach a
"%"
stellen ein Format für etwas dar:%d
ist die Tagesnummer%m
ist die Monatszahl%b
ist die Monatsabkürzung%y
ist das Jahr der letzten zwei Ziffern%Y
ist das ganze Jahrusw
Werfen Sie einen Blick auf die offizielle Dokumentation oder McCutchens Kurzreferenz, Sie können nicht alle kennen.
Seit PEP3101 kann jedes Objekt ein eigenes Format haben, das automatisch vom Methodenformat einer beliebigen Zeichenfolge verwendet wird. Im Fall von datetime ist das Format dasselbe, das in strftime verwendet wird. So können Sie das Gleiche wie oben tun:
Der Vorteil dieses Formulars besteht darin, dass Sie gleichzeitig auch andere Objekte konvertieren können.
Mit der Einführung formatierter Zeichenfolgenliterale (seit Python 3.6, 23.12.2016) kann dies wie folgt geschrieben werden
Lokalisierung
Daten können sich automatisch an die Landessprache und -kultur anpassen, wenn Sie sie richtig verwenden, aber es ist etwas kompliziert. Vielleicht für eine andere Frage zu SO (Stack Overflow) ;-)
quelle
inspect.isclass
auch um sicher zu gehen). Die Leute neigen dazu, "Typ" für Einbauten und "Klasse" für den Rest zu sagen, aber das ist nicht wichtigBearbeiten:
Nach dem Vorschlag von Cees habe ich auch angefangen, Zeit zu nutzen:
quelle
datetime.datetime
?datetime import datetime
und dann verwendenprint datetime().now().strftime("%Y-%m-%d %H:%M")
. Nur ein Syntaxunterschied.from datetime import date; date.today().strftime("%Y-%m-%d")
sieht für mich immer noch unpythonisch aus, aber das ist das Beste ohneimport time
. Ich denke, das Datum / Uhrzeit-Modul ist für Datumsmathematik.from datetime import datetime as dt
und jetzt können wir mitdt.now()
Die Objekte für Datum, Uhrzeit und Uhrzeit unterstützen alle eine strftime-Methode (Format), um eine Zeichenfolge zu erstellen, die die Zeit unter der Kontrolle einer expliziten Formatzeichenfolge darstellt.
Hier ist eine Liste der Formatcodes mit ihrer Direktive und Bedeutung.
Dies können wir mit den Datums- und Zeitmodulen in Python tun
Das wird ungefähr so ausdrucken:
quelle
Verwenden Sie date.strftime. Die Formatierungsargumente sind in der Dokumentation beschrieben .
Dieser ist, was Sie wollten:
Dieser berücksichtigt das Gebietsschema. (mach das)
quelle
Das ist kürzer:
quelle
quelle
Oder auch
Out: '25 .12.2013
oder
Out: 'Heute - 25.12.2013'
Out: 'Mittwoch'
Out: '__main ____ 2014.06.09__16-56.log'
quelle
Einfache Antwort -
quelle
Mit typspezifischer
datetime
Zeichenfolgenformatierung (siehe Antwort von nk9 mitstr.format()
.) In einem formatierten Zeichenfolgenliteral (seit Python 3.6, 23.12.2016):Die Datums- / Uhrzeitformat - Richtlinien werden nicht als Teil der dokumentierten Format String Syntax , sondern in
date
,datetime
undtime
‚s -strftime()
Dokumentation. Sie basieren auf dem C-Standard von 1989, enthalten jedoch einige ISO 8601-Richtlinien seit Python 3.6.quelle
Sie müssen das Datums- / Uhrzeitobjekt in eine Zeichenfolge konvertieren.
Der folgende Code hat bei mir funktioniert:
Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.
quelle
Du kannst tun:
quelle
Ich hasse die Idee, zu viele Module zu importieren. Ich würde lieber mit verfügbaren Modulen arbeiten, was in diesem Fall
datetime
eher ist, als ein neues Modul aufzurufentime
.quelle
a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
In Anbetracht der Tatsache, dass Sie um etwas Einfaches gebeten haben, um das zu tun, was Sie wollten, könnten Sie einfach:
quelle
Verwenden Sie für diejenigen, die ein auf dem Gebietsschema basierendes Datum und ohne Uhrzeit wünschen:
quelle
Vielleicht möchten Sie es als Zeichenfolge anhängen?
quelle
Da das
print today
zurückgegeben wird, was Sie möchten, bedeutet dies, dass die__str__
Funktion des heutigen Objekts die gesuchte Zeichenfolge zurückgibt.So können Sie auch tun
mylist.append(today.__str__())
.quelle
Sie können easy_date verwenden , um es einfach zu machen:
quelle
Ein kurzer Haftungsausschluss für meine Antwort: Ich lerne Python erst seit ungefähr 2 Wochen, bin also kein Experte. Daher ist meine Erklärung möglicherweise nicht die beste und ich verwende möglicherweise eine falsche Terminologie. Wie auch immer, hier geht es.
Ich habe in Ihrem Code festgestellt, dass Sie Ihre Variable deklariert haben
today = datetime.date.today()
Ihre Variable mit dem Namen einer integrierten Funktion benannt haben.Wenn Ihre nächste Codezeile
mylist.append(today)
Ihre Liste anfügt, wird die gesamte Zeichenfolge angehängtdatetime.date.today()
, die Sie zuvor als Wert für Ihretoday
Variable festgelegt haben, anstatt nur anzuhängentoday()
.Eine einfache Lösung, die die meisten Codierer bei der Arbeit mit dem datetime-Modul möglicherweise nicht verwenden würden, besteht darin, den Namen Ihrer Variablen zu ändern.
Folgendes habe ich versucht:
und es druckt
yyyy-mm-dd
.quelle
So zeigen Sie das Datum als (Jahr / Monat / Tag) an:
quelle
Dies wird am 23.06.2008 gedruckt, wenn Sie dies möchten :)
quelle
Auf diese Weise können Sie das Datum wie folgt formatieren lassen: 22.06.2017
quelle
%b
Sie die ersten drei Monatswörter und mit%B
dem gesamten Monat. Beispiel:datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")
wird '2018-Oct-04 09:44:08' zurückgebenIch verstehe nicht ganz, kann aber verwenden
pandas
, um Zeiten im richtigen Format zu erhalten:Und:
Aber es speichert Zeichenfolgen, ist aber einfach zu konvertieren:
quelle