3909 Stimmen

Wie erhalte ich die aktuelle Uhrzeit?

Wie erhalte ich die aktuelle Uhrzeit?

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

3955voto

Harley Holcombe Punkte 165146

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.

55 Stimmen

Es wäre schön, wenn diese Antwort Zeitzonen abdecken würde (vielleicht UTC als Beispiel) und vielleicht mit time.time() beginnen würde.

17 Stimmen

@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.

0 Stimmen

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).

1221voto

Sean James Punkte 11211

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'

64 Stimmen

Ist das besser/schlechter als die Antwort von @ParaMeterz unten? Warum sollten wir die time Modul gegenüber dem datetime Modul?

6 Stimmen

Es wird nicht die aktuelle Stunde meines Computers angezeigt.

14 Stimmen

Dies ist die UTC-Zeit, anders als das datetime-Modul

864voto

ParaMeterz Punkte 8807
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 .

536voto

Ray Punkte 178277

Ä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'

1 Stimmen

@ppperry, dann weisen Sie der Antwort von Ray einfach eine Variable zu - etwa: myTime = str(datetime.now()) .

5 Stimmen

Nicht relevant; der Schritt "str" fällt nicht in den Rahmen der Frage

24 Stimmen

@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.)

536voto

Wie erhalte ich die aktuelle Zeit in Python?

El time Modul

El time Modul stellt Funktionen zur Verfügung, die uns die Zeit in "Sekunden seit der Epoche" anzeigen, sowie andere Hilfsmittel.

import time

Unix-Epoche-Zeit

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 Modul

El 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

datumsabhängig 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).

datetime timezone aware

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.

0 Stimmen

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.

0 Stimmen

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.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