2016-04-08 147 views
2

这不起作用:使用Python来确定时间戳是在日光节约时间

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的调用的行为。

+0

文件系统将日期/时间戳存储为自纪元以来的秒数,它不包含任何时区或DST信息。只有在将历元时间转换为可显示的格式时才会添加。你试图匹配哪个基于c的电话? – cdarke

+0

如果认为我(只是)必须定义时区并要求pytz将其本地化,则允许DST。 – Jiminion

+0

您应该只能使用当前的时区而不能添加一个。 DST不在同一日期或时间跨时区应用。 – cdarke

回答

3

要找出给定的时间戳是否符合在当地时区夏令时(DST):

import os 
import time 

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

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

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

+0

工作。谢谢。 – Jiminion

0

为什么你认为你的文件系统写下带时区的时间戳?

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

注意,对于在从DST过渡某些时刻当地时间一些值出现两次,这是不可能的说,如果一个特定的时间戳(例如2:30 AM)之前或者在开关后发生(内一小时)。

+0

我想匹配一个基于c的调用的行为。 – Jiminion

+0

@Jiminion:哪个c调用? – cdarke

+0

'getmtime()'返回“自时代以来的秒数”,它不在任何时区(它不是UTC,它不在本地时区中)。它在全世界都是相同的数字(只要时间与期望的时钟同步,服务器使用什么时区并不重要)。请参阅[Python的time.time()是否返回本地或UTC时间戳?](http://stackoverflow.com/a/20035913/4279) – jfs