ISO 8601 czas nie przechowuje nazwę strefy czasowej, tylko odpowiednie przesunięcie UTC jest zachowana.
Aby przekonwertować plik ctime na ciąg czasu ISO 8601, zachowując przesunięcie UTC w Pythonie 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'
Kod zakłada, że twoją lokalną strefą czasową jest Wschodnia Strefa Czasowa (ET) i że twój system zapewnia prawidłowe przesunięcie UTC dla podanego znacznika czasu POSIX ( ts
), tj. Python ma dostęp do historycznej bazy danych stref czasowych w twoim systemie lub strefa czasowa miała te same zasady w danym dniu.
Jeśli potrzebujesz przenośnego rozwiązania; użyj pytz
modułu, który zapewnia dostęp do bazy danych tz :
>>> 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'
W tym przypadku wynik jest taki sam.
Jeśli potrzebujesz nazwy strefy czasowej / skrótu / identyfikatora strefy, zapisz ją osobno.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Uwaga: nie, :
w offsecie i EST
skrócie strefy czasowej UTC nie jest częścią formatu czasu ISO 8601. To nie jest wyjątkowe.
Różne biblioteki / różne wersje tej samej biblioteki mogą używać różnych reguł stref czasowych dla tej samej daty / strefy czasowej. Jeśli jest to data w przyszłości, reguły mogą być jeszcze nieznane. Innymi słowy, ten sam czas UTC może odpowiadać innemu czasowi lokalnemu w zależności od używanych reguł - oszczędność czasu w formacie ISO 8601 pozwala zachować czas UTC i czas lokalny odpowiadający bieżącym regułom strefy czasowej używanym na Twojej platformie . Może być konieczne ponowne obliczenie czasu lokalnego na innej platformie, jeśli ma ona inne reguły.