Uso de python para determinar si una marca de tiempo se encuentra en horario de verano

Esto no funciona:

t = os.path.getmtime(filename) dTime = datetime.datetime.fromtimestamp(t) justTime = dTime.timetuple() if justTime.tm_isdst == 0 : tDelta = datetime.timedelta(hours=0) else: tDelta = datetime.timedelta(hours=1) 

Lo que sucede en cambio es que el condicional siempre es igual a 1, a pesar de que algunas de las marcas de tiempo se encuentran dentro del horario de ahorro diurno.

Estoy tratando de hacer que una llamada python coincida con el comportamiento de una llamada basada en c.

Para saber si una marca de tiempo determinada corresponde al horario de verano (DST) en la zona horaria local:

 import os import time timestamp = os.path.getmtime(filename) isdst = time.localtime(timestamp).tm_isdst > 0 

Puede fallar Para solucionar los problemas, puede obtener un acceso portátil a la base de datos tz utilizando el módulo pytz :

 from datetime import datetime import tzlocal # $ pip install tzlocal local_timezone = tzlocal.get_localzone() # get pytz tzinfo isdst = bool(datetime.fromtimestamp(timestamp, local_timezone).dst()) 

Relacionado: use Python para averiguar si una zona horaria se encuentra actualmente en horario de verano .

¿Por qué asumes que tu sistema de archivos anota las marcas de tiempo con una zona horaria?

En un servidor, se adhiere a UTC que no tiene DST. En una computadora de escritorio, debe buscar el último momento del cambio de horario de verano (activado o desactivado) y corregir la hora según corresponda. No sé si pytz tiene esta información, pero esta información está definitivamente disponible en la web en una forma legible por la máquina.

Tenga en cuenta que durante algunos momentos durante la transición desde el horario de verano, algunos valores de la hora local se producen dos veces , y es imposible saber si una marca de tiempo en particular (por ejemplo, 2:30 a.m.) ocurrió antes o después del cambio (dentro de una hora).