Формат времени ISO 8601 не хранит название часового пояса, сохраняется только соответствующее смещение UTC.
Чтобы преобразовать файл ctime в строку времени ISO 8601, сохранив смещение UTC в 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'
Код предполагает, что ваш местный часовой пояс - это восточный часовой пояс (ET) и что ваша система предоставляет правильное смещение UTC для данной временной метки POSIX ( ts
), т. Е. У Python есть доступ к базе данных исторических часовых поясов в вашей системе, или часовой пояс имел такие же правила на данную дату.
Если вам нужно портативное решение; используйте pytz
модуль, который обеспечивает доступ к базе данных 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'
Результат такой же в этом случае.
Если вам нужно название часового пояса / сокращение / идентификатор зоны, сохраните его отдельно.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Примечание: нет, :
смещение UTC и EST
сокращение часового пояса не является частью формата времени ISO 8601. Это не уникально.
Разные библиотеки / разные версии одной и той же библиотеки могут использовать разные правила часового пояса для одной и той же даты / часового пояса. Если это будущая дата, то правила могут быть еще неизвестны. Другими словами, одно и то же время UTC может соответствовать разному местному времени, в зависимости от того, какие правила вы используете - сохранение времени в формате ISO 8601 сохраняет время UTC и местное время, которое соответствует текущим правилам часового пояса, используемым на вашей платформе. , Возможно, вам придется пересчитать местное время на другой платформе, если она имеет другие правила.