ISO8601 time format no almacena una zona horaria nombre, solo se conserva el desplazamiento utc correspondiente.
Para convertir un ctime archivo a una cadena de tiempo ISO 8601 preservando al mismo tiempo el desplazamiento en Python 3 UTC:
>>> 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 se supone que su zona horaria local es zona horaria del Este y que el sistema proporciona una UTC correcta offset para la marca de tiempo POSIX dada (ts
) es decir, python tiene acceso a una base de datos de zona horaria histórica en su sistema o la zona horaria tiene las mismas reglas en una fecha dada.
Si necesita una solución portátil; use pytz
module que proporciona acceso a the tz database:
>>> 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 la zona horaria nombre/abreviatura/identificación de zona; almacenarlo 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 de UTC y la zona horaria EST
abreviatura no es parte del formato de hora ISO8601. No es único.
Diferentes bibliotecas/diferentes versiones de la misma biblioteca pueden usar diferentes reglas de zona horaria para la misma fecha/zona horaria. Si se trata de una fecha futura, las reglas aún podrían ser desconocidas. En otras palabras, la misma hora UTC puede corresponder a una hora local diferente según las reglas que use; al guardar una hora en formato ISO8601 se conserva la hora UTC y la hora local que corresponde a las reglas actuales de la zona horaria en su plataforma . Es posible que necesite volver a calcular la hora local en una plataforma diferente si tiene reglas diferentes.
posible duplicado de (http://stackoverflow.com/questions/969285/ how-do-i-translate-a-iso-8601-datetime-string-into-a-python-datetime-object) –
@ Nick- Enlace útil, pero no es un duplicado; pregunta por la conversión en el otro sentido. – Yarin
@ Joseph- Acabo de preguntar esto en lo que respecta a RFC 3999- debería funcionar para esto - [Generar RFC 3339 marca de tiempo en Python] (http://stackoverflow.com/q/8556398/165673) – Yarin