使用Python判断时间戳是否处于夏令时期间

6

这不起作用:

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


如果我认为我只需要定义一个时区并要求pytz进行本地化,以允许DST。 - Jiminion
1
你应该能够使用当前的时区而不需要添加一个。夏令时在不同的时区并不是在同一日期或时间应用的。 - cdarke
这是一个 CVI (NI) 调用 GetFileTime() 的函数。 - Jiminion
GetFileTime()是Win32 API,我认为是这样,我对吗?另请参见http://www.timeanddate.com/time/dst/events.html。 - cdarke
我注意到FAT确实使用本地时间,我之前并没有意识到。我猜现在只有存储卡使用FAT了。https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724290(v=vs.85).aspx - cdarke
显示剩余2条评论
2个回答

6

要确定给定的时间戳是否对应于本地时区的夏令时(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())

相关: 使用Python判断时区当前是否处于夏令时


-1

为什么您认为您的文件系统会以时区方式记录时间戳?

在服务器上,您应该坚持使用UTC,因为UTC没有夏令时。 在桌面上,您应该查找夏令时更改的最新时间,并相应地更正时间。 我不知道pytz是否拥有此信息,但是这些信息绝对可以以机器可读的形式在网络上获取。

请注意,在从夏令时转换期间的某些时刻,一些本地时间值出现了两次,而且无法确定特定时间戳(例如2:30 am)发生在开关之前还是之后(在一个小时内)。


我正在尝试匹配基于C语言的函数调用行为。 - Jiminion
@Jiminion:指的是哪个基于C语言的调用? - cdarke
getmtime() 返回的是“自纪元以来的秒数”,它不属于任何时区(既不是UTC,也不是本地时区)。它在全球范围内都是相同的数字(只要服务器的时间与所需的时钟同步即可,无论服务器使用哪个时区)。请参阅Python的 time.time()返回本地时间戳还是UTC时间戳? - jfs
"自纪元以来的秒数",也称为["Unix时间"]以UTC为准(参见https://en.wikipedia.org/wiki/Unix_time)。 - 9000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接