Ich habe eine Datei. In Python möchte ich die Erstellungszeit in eine ISO-Zeitzeichenfolge (ISO 8601) konvertieren und dabei die Tatsache beibehalten, dass sie in der Eastern Time Zone (ET) erstellt wurde .
Wie nehme ich die ctime der Datei und konvertiere sie in eine ISO-Zeitzeichenfolge, die die östliche Zeitzone angibt (und gegebenenfalls die Sommerzeit berücksichtigt)?
Antworten:
Lokal nach ISO 8601:
UTC nach ISO 8601:
Lokal nach ISO 8601 ohne Mikrosekunde:
UTC nach ISO 8601 mit TimeZone-Informationen (Python 3):
UTC nach ISO 8601 mit lokalen TimeZone-Informationen ohne Mikrosekunde (Python 3):
Lokal nach ISO 8601 mit TimeZone-Informationen (Python 3):
Beachten Sie, dass bei der Verwendung
astimezone()
von utc time ein Fehler auftritt. Dies ergibt ein falsches Ergebnis:Für Python 2 siehe und verwenden Sie pytz .
quelle
.isoformat()
kann einen.isoformat(' ')
It is permitted to omit the 'T' character by mutual agreement.
Folgendes konvertiere ich in das XSD-Datums- / Uhrzeitformat:
Ich bin auf diese Frage gestoßen, als ich nach dem XSD-Datums- / Uhrzeitformat gesucht habe (
xs:dateTime
). Ich musste die Mikrosekunden von entfernenisoformat
.quelle
xs:date
aus XSD / XML-Stylesheets.xs:dateTime
ISO 8601 Zeitdarstellung
Die internationale Norm ISO 8601 beschreibt eine Zeichenfolgendarstellung für Datum und Uhrzeit. Zwei einfache Beispiele für dieses Format sind
(die beide für den 16. Dezember 2010 stehen), aber das Format ermöglicht auch Auflösungszeiten von weniger als einer Sekunde und die Angabe von Zeitzonen. Dieses Format ist natürlich nicht Python-spezifisch, aber es eignet sich zum Speichern von Datum und Uhrzeit in einem tragbaren Format. Details zu diesem Format finden Sie im Eintrag von Markus Kuhn .
Ich empfehle die Verwendung dieses Formats, um Zeiten in Dateien zu speichern.
Eine Möglichkeit, die aktuelle Zeit in dieser Darstellung abzurufen, besteht darin, strftime aus dem Zeitmodul in der Python-Standardbibliothek zu verwenden:
Sie können den strptime-Konstruktor der datetime-Klasse verwenden:
Das robusteste ist das Egenix mxDateTime-Modul:
Verweise
Die Dokumentation zum Python-Zeitmodul
Die Dokumentation zur Python-Datetime-Klasse
Die Egenix mxDateTime-Klasse
quelle
2018-05-25
2018-05-25T12:16:14+00:00
2018-05-25T12:16:14Z
20180525T121614Z
Ich habe die datetime.isoformat in der Dokumentation gefunden . Es scheint zu tun, was Sie wollen:
quelle
ISO 8601 ermöglicht eine kompakte Darstellung ohne Trennzeichen außer dem
T
. Daher verwende ich diesen Einzeiler gerne, um eine schnelle Zeitstempelzeichenfolge zu erhalten:Wenn Sie die Mikrosekunden nicht benötigen, lassen Sie einfach das
.%f
Teil weg :Für Ortszeit:
Bearbeiten:
Nachdem Sie dies noch einmal gelesen haben, empfehlen wir Ihnen, die Interpunktion in zu belassen . RFC 3339 empfiehlt diesen Stil, da bei Verwendung von Interpunktion nicht die Gefahr besteht, dass mehrere ISO 8601-Zeichenfolgen in Gruppen nach Interpunktion sortiert werden. Der einzige Liner für eine konforme Saite wäre also:
quelle
2019-02-23T04:02:04.051Z
mitnew Date().toISOString()
Das ISO 8601-Zeitformat speichert keinen Zeitzonennamen, sondern nur den entsprechenden UTC-Offset.
So konvertieren Sie eine Datei ctime in eine ISO 8601-Zeitzeichenfolge unter Beibehaltung des UTC-Offsets in Python 3:
Der Code geht davon aus, dass Ihre lokale Zeitzone Eastern Time Zone (ET) ist und dass Ihr System einen korrekten UTC-Offset für den angegebenen POSIX-Zeitstempel bereitstellt (
ts
) , dh Python hat Zugriff auf eine historische Zeitzonendatenbank auf Ihrem System oder die Zeitzone hatte die gleiche Regeln zu einem bestimmten Zeitpunkt.Wenn Sie eine tragbare Lösung benötigen; Verwenden Sie das
pytz
Modul , das den Zugriff auf die tz-Datenbank ermöglicht :Das Ergebnis ist in diesem Fall dasselbe.
Wenn Sie den Zeitzonennamen / die Abkürzung / die Zonen-ID benötigen, speichern Sie ihn separat.
Hinweis: Nein,
:
dieEST
Abkürzung für UTC-Offset und Zeitzone ist nicht Teil des Zeitformats ISO 8601. Es ist nicht einzigartig.Unterschiedliche Bibliotheken / unterschiedliche Versionen derselben Bibliothek verwenden möglicherweise unterschiedliche Zeitzonenregeln für dasselbe Datum / dieselbe Zeitzone. Wenn es sich um ein zukünftiges Datum handelt, sind die Regeln möglicherweise noch nicht bekannt. Mit anderen Worten, dieselbe UTC-Zeit kann je nach den von Ihnen verwendeten Regeln einer anderen Ortszeit entsprechen. Durch das Speichern einer Zeit im ISO 8601-Format bleiben die UTC-Zeit und die Ortszeit erhalten, die den aktuell auf Ihrer Plattform verwendeten Zeitzonenregeln entspricht . Möglicherweise müssen Sie die Ortszeit auf einer anderen Plattform neu berechnen, wenn andere Regeln gelten.
quelle
Sie müssen verwenden
os.stat
, um die Zeit für die Dateierstellung und eine Kombination austime.strftime
undtime.timezone
für die Formatierung abzurufen:quelle
Korrigieren Sie mich, wenn ich falsch liege (ich bin es nicht), aber der Versatz von UTC ändert sich mit der Sommerzeit. Also solltest du verwenden
Ich glaube auch, dass das Zeichen anders sein sollte:
Ich könnte mich irren, aber ich denke nicht.
quelle
Ich stimme Jarek zu und stelle außerdem fest, dass das ISO-Offset-Trennzeichen ein Doppelpunkt ist. Daher denke ich, dass die endgültige Antwort lauten sollte:
quelle
Hinzufügen einer kleinen Variation zu Estanis hervorragender Antwort
Lokal nach ISO 8601 mit TimeZone und ohne Mikrosekunden-Informationen (Python 3):
Beispielausgabe:
Getestet, dass diese Ausgabe sowohl von Javascript
Date
als auch von C #DateTime
/ analysiert werden kannDateTimeOffset
quelle
Ich habe diese Funktion entwickelt:
quelle
quelle