Wie erhalte ich die aktuelle Uhrzeit?
Es wäre schön, wenn diese Antwort Zeitzonen abdecken würde (vielleicht UTC als Beispiel) und vielleicht mit time.time() beginnen würde.
Wie erhalte ich die aktuelle Uhrzeit?
Verwendung:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)
>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150
Und genau zur richtigen Zeit:
>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)
>>> print(datetime.datetime.now().time())
15:08:24.789150
Siehe die Dokumentation für weitere Informationen.
Um Tipparbeit zu sparen, können Sie die datetime
Objekt aus dem datetime
Modul:
>>> from datetime import datetime
Dann entfernen Sie den führenden datetime.
aus allen oben genannten Bereichen.
Es wäre schön, wenn diese Antwort Zeitzonen abdecken würde (vielleicht UTC als Beispiel) und vielleicht mit time.time() beginnen würde.
@Toskan das Format war nicht Teil der Frage, also sollte es auch nicht Teil der Antwort sein. Es gibt bereits einen Link zur weiteren Dokumentation des Moduls, die Dinge wie Formatierung enthält.
In welcher Version von Python wurde die ursprüngliche Antwort gegeben? Einfach eintippen datetime.datetime.now()
in meiner interaktiven Python 2.7-Konsole (IronPython wurde noch nicht aktualisiert) ergibt das gleiche Verhalten wie das neuere Beispiel mit print()
in der Antwort. Ich habe nicht erfolgreich repliziert, was die ursprüngliche Antwort zeigt (datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)). (Nicht, dass ich das wirklich möchte, ich bevorzuge das print()-Verhalten, aber ich bin neugierig).
Sie können verwenden time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
Ist das besser/schlechter als die Antwort von @ParaMeterz unten? Warum sollten wir die time
Modul gegenüber dem datetime
Modul?
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
In diesem Beispiel sieht die Ausgabe wie folgt aus: '2013-09-18 11:16:32'
Hier ist die Liste der strftime
Direktiven .
Ähnlich wie Harleys Antwort , sondern verwenden Sie die str()
Funktion für ein schnelles, etwas besser lesbares Format:
>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
@ppperry, dann weisen Sie der Antwort von Ray einfach eine Variable zu - etwa: myTime = str(datetime.now()) .
@pppery Auch nicht die op sagen, es ist nicht über eine Zeichenfolge der Zeit zu bekommen. Die Aufgabe sagt überhaupt nicht, was sie mit der Zeit machen will, also warum ist es schlecht, zu zeigen, wie man sie in einen String umwandelt? In den meisten Antworten geht es darum, eine Zeichenkette aus der Zeit zu erhalten, es scheint also ein gängiger Anwendungsfall zu sein, warum also Rays Antwort herausgreifen? Was nützt es, einfach die Zeit zu erhalten, ohne zu wissen, wie man hacer etwas damit anfangen? Man kann es ausdrucken oder damit rechnen, und nur ein paar der Antworten zeigen, wie man damit rechnet, also denke ich, dass das Drucken/Auslesen einer Zeichenkette eine übliche Verwendung ist. ;-) (Ich weiß, dass ich deswegen gekommen bin.)
Wie erhalte ich die aktuelle Zeit in Python?
time
ModulEl time
Modul stellt Funktionen zur Verfügung, die uns die Zeit in "Sekunden seit der Epoche" anzeigen, sowie andere Hilfsmittel.
import time
Dies ist das Format, in dem Sie Zeitstempel für die Speicherung in Datenbanken erhalten sollten. Es handelt sich um eine einfache Gleitkommazahl, die in eine Ganzzahl umgewandelt werden kann. Es eignet sich auch gut für die Arithmetik in Sekunden, da es die Anzahl der Sekunden seit dem 1. Januar 1970, 00:00:00, darstellt und im Vergleich zu den anderen Zeitdarstellungen, die wir uns als Nächstes ansehen werden, sehr speicherfreundlich ist:
>>> time.time()
1424233311.771502
Dieser Zeitstempel berücksichtigt keine Schaltsekunden, er ist also nicht linear - Schaltsekunden werden ignoriert. Er entspricht zwar nicht dem internationalen UTC-Standard, ist aber nahe dran und daher für die meisten Fälle von Aufzeichnungen recht gut geeignet.
Für die menschliche Terminplanung ist dies jedoch nicht ideal. Wenn Sie ein zukünftiges Ereignis haben, das zu einem bestimmten Zeitpunkt stattfinden soll, sollten Sie diese Zeit mit einer Zeichenkette speichern, die in eine datetime
Objekt oder ein serialisiertes datetime
Objekt (diese werden später beschrieben).
time.ctime
Sie können die aktuelle Zeit auch so darstellen, wie es Ihr Betriebssystem bevorzugt (was bedeutet, dass sie sich ändern kann, wenn Sie Ihre Systemeinstellungen ändern, also verlassen Sie sich nicht darauf, dass dies auf allen Systemen standardmäßig der Fall ist, wie ich es bei anderen gesehen habe). Dies ist in der Regel benutzerfreundlich, führt aber in der Regel nicht zu Zeichenketten, die man chronologisch sortieren kann:
>>> time.ctime()
'Tue Feb 17 23:21:56 2015'
Sie können Zeitstempel in menschenlesbare Form hydrieren mit ctime
auch:
>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'
Diese Umwandlung ist auch nicht gut für die Aufzeichnung (außer bei Texten, die nur von Menschen analysiert werden können - und mit verbesserter optischer Zeichenerkennung und künstlicher Intelligenz wird die Zahl dieser Fälle meiner Meinung nach abnehmen).
datetime
ModulEl datetime
Modul ist auch hier sehr nützlich:
>>> import datetime
datetime.datetime.now
El datetime.now
ist eine Klassenmethode, die die aktuelle Zeit zurückgibt. Sie verwendet die time.localtime
ohne die Angabe der Zeitzone (falls nicht angegeben, ansonsten siehe "Zeitzone bewusst" unten). Es hat eine Repräsentation (die es Ihnen erlauben würde, ein äquivalentes Objekt neu zu erstellen), die auf der Shell ausgegeben wird, aber wenn sie gedruckt (oder in eine str
), sie ist in einem menschenlesbaren (und fast ISO-konformen) Format, und die lexikografische Sortierung entspricht der chronologischen Sortierung:
>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461
utcnow
Auf diese Weise erhalten Sie ein datetime-Objekt in UTC-Zeit, einem globalen Standard:
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988
UTC ist ein Zeitstandard, der der GMT-Zeitzone nahezu gleichwertig ist. (GMT und UTC ändern sich zwar nicht wegen der Sommerzeit, aber ihre Nutzer können im Sommer auf andere Zeitzonen wie die britische Sommerzeit umstellen).
Keines der bisher erstellten Datetime-Objekte kann jedoch einfach in verschiedene Zeitzonen umgewandelt werden. Wir können dieses Problem mit dem pytz
Modul:
>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)
Äquivalent dazu haben wir in Python 3 die timezone
Klasse mit einem utc timezone
Instanz angehängt, wodurch das Objekt auch die Zeitzone kennt (aber zur Konvertierung in eine andere Zeitzone ohne die praktische pytz
Modul wird dem Leser als Übung überlassen):
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)
Und wir sehen, dass wir das ursprüngliche UTC-Objekt leicht in Zeitzonen umwandeln können.
>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00
Sie können auch ein naives datetime-Objekt mit der Option pytz
Zeitzone localize
Methode oder durch Ersetzen des Attributs tzinfo (mit replace
Dies ist jedoch eher das letzte Mittel als die beste Praxis:
>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)
El pytz
Modul ermöglicht es uns, unsere datetime
Objekte, die die Zeitzonen kennen, und konvertieren die Zeiten in die Hunderte von Zeitzonen, die in der pytz
Modul.
Man könnte dieses Objekt scheinbar für die UTC-Zeit serialisieren und speichern dass in einer Datenbank zu speichern, aber das würde viel mehr Speicherplatz erfordern und wäre fehleranfälliger als die einfache Speicherung der Unix-Epoche, die ich zuerst demonstriert habe.
Die anderen Möglichkeiten der Zeitanzeige sind sehr viel fehleranfälliger, vor allem, wenn es sich um Daten handelt, die aus verschiedenen Zeitzonen stammen können. Sie möchten, dass es keine Verwirrung darüber gibt, für welche Zeitzone eine Zeichenkette oder ein serialisiertes datetime-Objekt bestimmt war.
Wenn Sie die Uhrzeit mit Python für den Benutzer anzeigen wollen, ctime
funktioniert gut, zwar nicht in einer Tabelle (sie lässt sich normalerweise nicht gut sortieren), aber vielleicht in einer Uhr. Ich persönlich empfehle jedoch, wenn man mit Zeit in Python arbeitet, entweder die Unix-Zeit oder eine Zeitzone zu verwenden, die UTC datetime
Objekt.
Ich denke, jeder kann zustimmen, dass ctime
ist wohl die seltsamste Art der Formatierung eines Datums. Abgekürzter Wochentag und Monat, Tag des Monats, 24 Stunden h:m:s, und dann ein vierstelliges Jahr. Nerds, die gerne Datumsstrings sortieren, Amerikaner, Europäer... jeder - ja, jeder - kann mindestens zwei Dinge finden, die ihn an diesem Format stören. Obwohl ich es verwende, weil es super einfach ist.
Wie ich oben in Bezug auf ctime
: "Sie können die aktuelle Zeit auch so darstellen, wie es Ihr Betriebssystem bevorzugt (was bedeutet, dass sie sich ändern kann, wenn Sie Ihre Systemeinstellungen ändern, also verlassen Sie sich nicht darauf, dass dies auf allen Systemen Standard ist, wie ich es bei anderen gesehen habe). Dies ist in der Regel benutzerfreundlich, führt aber in der Regel nicht zu Zeichenketten, die man chronologisch sortieren kann:"
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.
81 Stimmen
Bitte beachten Sie, dass die meisten Antworten für die zeitzonenunabhängige Datetime sind, während wir sehen, dass in der Produktionsumgebung mehr und mehr Dienste auf der ganzen Welt miteinander verbunden sind und die zeitzonenabhängige Datetime zum erforderlichen Standard wird.
6 Stimmen
Dies ist ein sehr berechtigtes Argument von @SawomirLenart, und hier ist eine kurze Anleitung dazu mehrere Möglichkeiten, die aktuelle Zeit auf der Grundlage der Zeitzone zu ermitteln
0 Stimmen
Datetime-Bibliothek ist das, wonach Sie suchen
0 Stimmen
@SawomirLenart Ah, Zeitzonen. Eines dieser Dinge, die die Menschheit einfach nicht aufhören kann, durcheinander zu bringen.