使用python确定时间戳是否在夏令时之下

时间:2016-04-08 18:36:22

标签: 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,尽管有些时间戳在白天节省时间内。

我正在尝试使python调用匹配基于c的调用的行为。

2 个答案:

答案 0 :(得分:3)

要确定给定时间戳是否与当地时区的夏令时(DST)相对应:

import os
import time

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

It may fail。要解决这些问题,您可以使用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())

相关:Use Python to find out if a timezone currently in daylight savings time

答案 1 :(得分:0)

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

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

请注意,在过渡期间从DST过渡时,某些本地时间值会出现两次,并且无法确定某个特定时间戳(例如凌晨2:30) )在开关之前或之后(一小时内)发生。