форматът за час 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 времето и местното време, което съответства на текущото време правила на зоната, използвани на вашата платформа. Може да се наложи да преизчислите местното време на друга платформа, ако има различни правила.
person
jfs
schedule
28.11.2015