Формат часу 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 та місцевий час, що відповідає поточним правилам часового поясу, які використовуються на вашій платформі . Можливо, вам доведеться перерахувати місцевий час на іншій платформі, якщо він має різні правила.