【问题标题】:In python how to check if a given time is in Daylight Saving Time period?在python中如何检查给定时间是否在夏令时?
【发布时间】:2017-01-29 08:52:37
【问题描述】:

我需要帮助使用 Python 3 解决这个问题。我需要知道给定日期,例如 2017 06 02,是否处于夏令时。

我在这里和谷歌上寻找答案。但我发现基本上只能用当前日期解决这个问题。而且要根据我的需要修改这些示例,这对我来说太难了:/ 不幸的是,我在 Python 上还没有那么高效。

完美的解决方案就是将 false 作为答案。然后我就可以继续我的逻辑了。

编辑: 正如我所说,我在这里找到了一些解决方案。但是他们都在用当前的时间解决这个问题。我需要知道未来或过去的某个日期是否在夏令时。问题是我是一名大三学生,根据自己的需要修改这些示例对我来说太难了。

【问题讨论】:

  • 每年会有一天(如果过渡时间不是午夜,则可能是两天)知道日期并不能提供足够的证据来确定它是否是夏令时。此外,在您返回的那一天,将有一个小时知道当地时间不会告诉您夏令时是否有效。
  • 出于这个原因,您应该使用pytz 并遵循他们的建议“处理时间的首选方法是始终使用UTC,仅在生成供人类阅读的输出时转换为本地时间。 "

标签: python-3.x


【解决方案1】:

好的,我想我自己做到了。首先我写了这个函数:

import time

def is_dst(date):
    return bool(time.localtime(date).tm_isdst)

接下来我得到这样的真假:

is_dst(time.mktime(MyDateObject.timetuple())))

我确信这不是最好的解决方案,因为我是一个 Python 新手,但它对我有用。所以现在从这一点开始,我可以继续我的逻辑了。

【讨论】:

  • bool(time.localtime(MyDateObject.timestamp()).tm_isdst) 在我的机器(Python 3.8 x86_64)上更短,速度也快了大约 4 倍。
【解决方案2】:
import time # imports the time module
time.localtime().tm_isdst # localtime() returns a tuple

DST 无效时值为 0。

DST 生效时值为 1。

当 DST 未知时,值为 -1。

【讨论】:

  • 谢谢。好的,据我了解,此示例适用于当前日期。但是如何将它与未来或过去的日期一起使用?
  • @SimonLickus 我不确定。也许阅读官方文档?
猜你喜欢
  • 2012-06-26
  • 2013-11-25
  • 2016-07-30
  • 2018-01-12
  • 2012-05-26
  • 2013-12-23
  • 1970-01-01
  • 2018-04-28
  • 2013-01-21
相关资源
最近更新 更多