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:
>>> import os
>>> from datetime import datetime, timezone
>>> ts = os.path.getctime(some_file)
>>> dt = datetime.fromtimestamp(ts, timezone.utc)
>>> dt.astimezone().isoformat()
'2015-11-27T00:29:06.839600-05:00'
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 :
>>> import os
>>> from datetime import datetime
>>> import pytz # pip install pytz
>>> ts = os.path.getctime(some_file)
>>> dt = datetime.fromtimestamp(ts, pytz.timezone('America/New_York'))
>>> dt.isoformat()
'2015-11-27T00:29:06.839600-05:00'
Das Ergebnis ist in diesem Fall dasselbe.
Wenn Sie den Zeitzonennamen / die Abkürzung / die Zonen-ID benötigen, speichern Sie ihn separat.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Hinweis: Nein, :
die EST
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.