使用python确定时间戳是不是在夏令时
Posted
技术标签:
【中文标题】使用python确定时间戳是不是在夏令时【英文标题】:Using python to determine if a timestamp is under daylight savings time使用python确定时间戳是否在夏令时 【发布时间】:2016-07-30 03:31:05 【问题描述】:这不起作用:
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 信息。仅当您将纪元时间转换为可显示格式时才会添加。您要匹配哪个基于 c 的调用? 如果我认为我(只是)必须定义一个时区并要求 pytz 对其进行本地化,从而允许 DST。 您应该能够只使用您当前的时区而不是添加一个。 DST 不会跨时区应用于同一日期或时间。 这是一个 cvi (NI) 调用 GetFileTime()。 GetFileTime() 我认为是一个win32 API,对吗?另请参阅timeanddate.com/time/dst/events.html。 【参考方案1】:要确定给定时间戳是否对应于当地时区的夏令时 (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.
【讨论】:
【参考方案2】:为什么你认为你的文件系统会写下带有时区的时间戳?
在服务器上,您坚持使用没有 DST 的 UTC。在桌面上,您应该查找 DST 更改的最新时刻(打开或关闭),并相应地更正时间。我不知道pytz
是否有这些信息,但这些信息绝对可以在网络上以机器可读的形式获得。
请注意,在从 DST 过渡的某些时刻,本地时间的某些值会出现两次,并且无法判断特定时间戳(例如凌晨 2:30 ) 发生在切换之前或之后(一个小时内)。
【讨论】:
我正在尝试匹配基于 c 的调用的行为。 @Jiminion: 哪个基于 c 的调用?getmtime()
返回“自纪元以来的秒数”,它不在任何时区(它不在 UTC,也不在本地时区)。它在世界各地都是相同的数字(只要服务器的时间与所需的时钟同步,服务器使用哪个时区并不重要)。见Does Python's time.time()
return the local or UTC timestamp?
“自纪元以来的秒数”又名"Unix time" is in UTC。以上是关于使用python确定时间戳是不是在夏令时的主要内容,如果未能解决你的问题,请参考以下文章