关于datetime:使用python确定时间戳是否在夏令时之下

Using python to determine if a timestamp is under daylight savings time

这不起作用:

1
2
3
4
5
6
7
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)相对应:

1
2
3
4
5
import os
import time

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

它可能会失败。 要解决这些问题,您可以使用pytz模块获取对tz数据库的可移植访问:

1
2
3
4
5
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())

相关:使用Python查找当前是否在夏令时中的时区。


为什么你假设你的文件系统用时区写下时间戳?

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

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