Le format d'heure ISO 8601 ne stocke pas de nom de fuseau horaire, seul le décalage UTC correspondant est conservé.
Pour convertir un fichier ctime en une chaîne horaire ISO 8601 tout en préservant le décalage UTC dans 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'
Le code suppose que votre fuseau horaire local est le fuseau horaire de l' Est (ET) et que votre système fournit un décalage UTC correct pour l'horodatage POSIX donné ( ts
), c'est-à-dire que Python a accès à une base de données de fuseau horaire historique sur votre système ou le fuseau horaire avait le mêmes règles à une date donnée.
Si vous avez besoin d'une solution portable; utilisez le pytz
module qui donne accès à la base de données 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'
Le résultat est le même dans ce cas.
Si vous avez besoin du nom / abréviation / id du fuseau horaire, enregistrez-le séparément.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Remarque: non, :
dans le décalage UTC et l' EST
abréviation de fuseau horaire ne fait pas partie du format d'heure ISO 8601. Ce n'est pas unique.
Différentes bibliothèques / différentes versions de la même bibliothèque peuvent utiliser des règles de fuseau horaire différentes pour la même date / fuseau horaire. S'il s'agit d'une date future, les règles sont peut-être encore inconnues. En d' autres termes, en même temps UTC peut correspondre à une autre heure locale en fonction de ce que règles que vous utilisez - l' enregistrement d' une heure au format ISO 8601 conserve l' heure UTC et l'heure locale qui correspond aux actuelles règles de fuseau horaire en cours d' utilisation sur votre plate - forme . Vous devrez peut-être recalculer l'heure locale sur une autre plate-forme si elle a des règles différentes.