使用python确定时间戳是否低于夏令时

使用python确定时间戳是否低于夏令时,python,datetime,dst,pytz,Python,Datetime,Dst,Pytz,这不起作用: 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) 取而代之的是,条件始终等于1,尽管一些时间戳在

这不起作用:

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)
取而代之的是,条件始终等于1,尽管一些时间戳在白天的节省时间内


我试图使python调用与基于c的调用的行为相匹配

为什么您认为您的文件系统会用时区写下时间戳

在服务器上,您坚持使用没有DST的UTC。在桌面上,您应该查找DST更改的最新时刻(打开或关闭),并相应地更正时间。我不知道
pytz
是否有这些信息,但这些信息肯定是以机器可读的形式出现在网络上的


请注意,在从DST过渡期间的某些时刻,某些本地时间值出现两次,并且无法判断特定时间戳(例如2:30 am)是在切换之前还是之后(一小时内)出现。

要了解给定时间戳是否对应于本地时区的夏令时(DST),请执行以下操作:

import os
import time

timestamp = os.path.getmtime(filename)
isdst = time.localtime(timestamp).tm_isdst > 0
。为了解决这些问题,您可以使用
pytz
模块对tz数据库进行便携式访问:

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())

相关:。

我正在尝试匹配基于c的调用的行为。@Jiminion:哪个基于c的调用?
getmtime()
返回不在任何时区(不在UTC,不在本地时区)的“自历元起的秒数”。世界各地的数字都是相同的(只要服务器的时间与所需时钟同步,服务器使用的时区就无关紧要)。请参阅“自历元起的秒数”又名。文件系统将日期/时间戳存储为自历元起的秒数,不包括任何时区或DST信息。仅当将历元时间转换为可显示格式时,才会添加此选项。您要匹配哪个基于c的呼叫?如果您认为我(只是)必须定义一个时区,并要求pytz将其本地化,同时考虑DST。您应该能够只使用当前时区,而不添加一个时区。DST不是在同一个日期或时间跨时区应用的。它是一个cvi(NI)调用GetFileTime()。GetFileTime()是一个win32 API,我想,对吗?另见。