ambos objetos datetime son 'ingenuos', lo que significa que no saben acerca del horario de verano. datetime.now()
devuelve la hora actual en que se ejecuta su máquina, y eso podría incluir DST. Lo mismo vale para datetime.fromtimestamp(os.path.getmtime())
.
# 1: localizar sus objetos de fecha y hora podría ser una opción; algo como
from datetime import datetime
import tzlocal
now_aware = tzlocal.get_localzone().localize(datetime.now())
file_mtime = datetime.fromtimestamp(os.path.getmtime(file))
# assuming the file was created on a machine in the same timezone (!):
file_mtime_aware = now_aware.tzinfo.localize(file_mtime)
age = now_aware - file_mtime_aware
# 2 - otra opción, usando la conversión UTC con datetime
:
now = datetime.utcnow()
age = now - datetime.utcfromtimestamp(os.path.getmtime(file_name))
if (age.seconds + age.days * 24 * 3600) < -180:
print(f'WARN: file has timestamp from future?: {age} s')
# 3 - como VPfB señala en su respuesta, os.path.getmtime
devuelve una marca de tiempo UTC (verifique los documentos del módulo os y los documentos del módulo horario ). Entonces, la solución más fácil podría ser omitir la conversión datetime
en primer lugar y usar solo marcas de tiempo UTC; por ejemplo, obtener la marca de tiempo UTC actual como time.time()
.
Trabajar con zonas horarias puede volverte loco ... pero hay algunos buenos recursos, por ejemplo, esta publicación mediana .