El formato de hora ISO 8601 no almacena un nombre de zona horaria, solo se conserva el desplazamiento UTC correspondiente.
Para convertir un archivo ctime en una cadena de tiempo ISO 8601 mientras se preserva el desplazamiento UTC en 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'
El código asume que su zona horaria local es Zona Horaria del Este (ET) y que su sistema proporciona un desplazamiento UTC correcto para la marca de tiempo POSIX dada ( ts
), es decir, Python tiene acceso a una base de datos histórica de zonas horarias en su sistema o la zona horaria tenía el mismas reglas en una fecha dada.
Si necesita una solución portátil; use el pytz
módulo que proporciona acceso a la base de datos 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'
El resultado es el mismo en este caso.
Si necesita el nombre / abreviatura / identificación de zona horaria, almacénelo por separado.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Nota: no, :
en el desplazamiento UTC y la EST
abreviatura de zona horaria no forma parte del formato de hora ISO 8601. No es unico.
Diferentes bibliotecas / diferentes versiones de la misma biblioteca pueden usar diferentes reglas de zona horaria para la misma fecha / zona horaria. Si es una fecha futura, entonces las reglas pueden ser desconocidas todavía. En otras palabras, la misma hora UTC puede corresponder a una hora local diferente dependiendo de las reglas que use: guardar una hora en formato ISO 8601 conserva la hora UTC y la hora local que corresponde a las reglas de zona horaria actuales en uso en su plataforma . Es posible que deba volver a calcular la hora local en una plataforma diferente si tiene reglas diferentes.