有没有办法在 Python 中推断日期是否是 DST(夏令时)更改的实际日期?

2024-01-31

我想在Python中推断日期是否是一年中由于DST(夏令时)而改变小时的实际日期。

与图书馆pytz您可以本地化日期时间,并且实际的 DST 更改已正确完成。此外,还有一个方法dst()图书馆的datetime这使您可以推断实际日期是夏季还是冬季(example https://stackoverflow.com/questions/31146092/how-to-determine-if-a-timezone-specific-date-in-the-past-is-daylight-saving-or-n)。但是,我想推断 DST 更改的实际日期。

具体来说,我需要一个函数(例如is_dst_change(date, timezone)) 接收日期并仅对于一年中确实存在小时变化的那些日子返回 True。例如:

import pytz
import datetime

def is_dst_change(day, timezone):
    # Localize
    loc_day = pytz.timezone(timezone).localize(day)

    # Pseudocode: Infer if a date is the actual day in which the dst hour change is made
    if loc_day is dst_change_day:
        return True
    else:
        return False

# In the timezone 'Europe/Madrid', the days in which the DST change is made in 2021 are 28/03/2021 and 31/10/2021
is_dst_change(day=datetime.datetime(year=2021, month=3, day=28), timezone = 'Europe/Madrid')  # This should return True
is_dst_change(day=datetime.datetime(year=2021, month=10, day=31), timezone = 'Europe/Madrid')  # This should return True
is_dst_change(day=datetime.datetime(year=2021, month=2, day=1), timezone = 'Europe/Madrid')  # This should return False
is_dst_change(day=datetime.datetime(year=2021, month=7, day=1), timezone = 'Europe/Madrid')  # This should return False

因此,在上面的示例中,函数仅在 2021 年中使用is_dst_change(day, timezone='Europe/Madrid')将返回True分别是 2021 年 3 月 28 日和 2021 年 10 月 31 日。 2021 年剩下的日子里,它必须返回False。有没有办法用Python来推断这一点?


您可以利用日期时间.dst() https://docs.python.org/3/library/datetime.html#datetime.datetime.dst(UTC 偏移量的变化不一定是 DST 转换):

from datetime import datetime, time, timedelta
from zoneinfo import ZoneInfo # Python 3.9+

def is_date_of_DSTtransition(dt: datetime, zone: str) -> bool:
    """
    check if the date part of a datetime object falls on the date
    of a DST transition.
    """
    _d = datetime.combine(dt.date(), time.min).replace(tzinfo=ZoneInfo(zone))
    return _d.dst() != (_d+timedelta(1)).dst()

例如对于 tz欧洲/柏林 https://www.timeanddate.com/time/change/@2950159:

for d in range(366):
    if is_date_of_DSTtransition(datetime(2021, 1, 1) + timedelta(d), "Europe/Berlin"):
        print((datetime(2021, 1, 1) + timedelta(d)).date())
# 2021-03-28
# 2021-10-31

注意:我正在使用zoneinfo https://docs.python.org/3/library/zoneinfo.html在这里而不是pytz;对于遗留代码,有一个pytz 弃用垫片 https://pypi.org/project/pytz-deprecation-shim/。这是一个pytz无论如何版本(需要额外的normalize):

import pytz
def is_date_of_DSTtransition(dt: datetime, zone: str) -> bool:
    _d = pytz.timezone(zone).localize(datetime.combine(dt.date(), time.min))
    return _d.dst() != pytz.timezone(zone).normalize(_d+timedelta(1)).dst()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 Python 中推断日期是否是 DST(夏令时)更改的实际日期? 的相关文章

  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 为什么使用 std::make_* 而不是构造函数更好?

    STL中有一些函数以make 前缀如std make pair std make shared std make unique等等 为什么使用它们而不是简单地使用构造函数是更好的做法 auto pair2 std pair lt int d
  • 添加 VPC 配置后调用 lambda 超时

    我正在使用无服务器框架来创建 lambda 我创建了一个简单的 Lambda 函数 它从 Mongo 实例进行查询并返回响应 最初 我使用 publicIp 创建了 Mongo 实例 并让 Lambda 使用 publicIP 访问该实例
  • 在 mysql 脚本中静默“Query OK 0 row受影响”输出

    我有一个创建多个存储过程的 MySQL 脚本 我想让大家沉默 Query OK 0 rows affected 0 00 sec 当我运行时出现的消息 source MY SCRIPT sql 它变成了一个很长的列表 我有时会忘记在开发过程
  • Visual Studio 2010 中的 Microsoft 图表控件?

    这可能吗 我安装了它们 但它们没有出现 我必须导入它们还是什么 如果在工具箱中看不到 Chart 控件 请右键单击工具箱 选择 选择项 然后在 NET Framework 组件 选项卡中选择以下命名空间 System Web UI Data
  • 设置带有子包的 python 包的正确方法

    我正在尝试在 python 中设置一个带有子包的包 这是我目前拥有的树结构 myPackage init py mySubPackage1 foo2 py foo py init py mySubPackage2 bar2 py bar p
  • Android SQLiteOpenHelper - 每个表都有不同的类?

    我正在读这篇文章 http www vogella com tutorials AndroidSQLite article html http www vogella com tutorials AndroidSQLite article
  • 像 TinyPNG 这样的图像优化 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在 Google 上搜索过一个好的 Mass Image Optimizer 可以在 Windows
  • 如何从 Android 中的菜单项调用 Activity?

    我试图通过单击菜单按钮来调用 startActivity myIntent 但我的应用程序此时崩溃了 通过常规按钮单击 相同的 startActivity 调用可以正常工作 因此 我认为菜单按钮缺少有关上下文的信息 或者也许我在这里完全偏离
  • 将 jQueryUI 可排序列表与表单一起使用

    我正在使用 jQueryUI 创建一个可排序列表 并且 UI 部分工作得很好 因为我可以根据需要在网页上对项目进行排序 但我不知道排序列表的顺序是如何包含在 POST 中的 我对 javascript 完全是菜鸟 所以如果这真的很简单 请原
  • TimeSpan 转 ISO8601 持续时间格式字符串

    任何人都可以建议如何将时间跨度或整数转换为 ISO8601 持续时间字符串 如中所述http en wikipedia org wiki ISO 8601 Durations http en wikipedia org wiki ISO 8
  • WPF 验证器类似于 ASP.NET 中的验证器

    我们如何在 WPF 应用程序中实现类似于 ASP NET 应用程序的验证器 如必填字段验证器 提前致谢 None
  • 如何在 Cypress e2e 测试中使用 Angular Store

    我需要在我的 Angular Store 中注入一个值 调度一个操作 以使我的 Cypress e2e 测试正常工作 事实上 我需要我的商店包含 isLoggedIn true 来访问应用程序中的任何页面 否则用户将被重定向到登录页面 我在
  • 使用 visNetwork 动态更新 R 中的节点

    下面的快照视觉效果是使用 visNetwork 包创建的 我这里的要求是我必须对边缘进行硬编码 并且在使用 visHierarchicalLayout 之后 我无法按顺序看到它们 请帮助我采用动态方法 这样无论有多少个数字 我都会得到连续的
  • 查找字符串中某个字符的所有出现位置

    我试图找到所有出现的 在一个字符串中 def findSectionOffsets text startingPos 0 endPos len text for position in text find startingPos endPo
  • Eclipse 字体缩小和放大问题

    如何在 Eclipse 中放大和缩小文本 我找到了插件 但无法手动安装 请告诉我在 Eclipse 中安装不同插件的过程 我在使用 Android 开发工具 Eclipse 遇到很多问题后问了这个问题 查看此链接 您一定会喜欢它Eclips
  • 使用 PHP 整理多个 JavaScript 文件是否比单独包含它们更快?

    我知道提供多个小文件比提供一个大文件要慢得多 这就是为什么最好使用单个 CSS 文档和精灵表 一段时间以来 我还尝试在尽可能少的文件中包含尽可能多的 JavaScript 以避免查看者多次请求更多文件 但是在同一个文档中包含各种明显不同的任
  • Python 子进程因命名管道而挂起

    I m 挣扎在试图模仿这个简单的片段bash cat tmp fifo tub 1 24027 gunzip c tmp filedat dat gz gt tmp fifo tub line 01 line 02 line 03 line
  • 如何知道 python-docx 中的新段落何时导致新页面

    我必须使用动态创建Word文档python docx 我通过动态添加表行来实现这一点 并且无法知道页面上适合多少条记录 因为这取决于特定的数据 我需要知道添加到文档 表行或段落 的新元素何时会导致新页面 因此我可以根据每个页面包含的信息在数
  • 通过融合查看分支的差异?

    我知道我可以查看 HEAD 和当前状态之间的差异meld 但是我如何查看分支之间的差异 例如master and devel与融合 目前我执行以下步骤 重命名工作副本的文件夹例如mv projectA projectA master 再次克
  • 有没有办法在 Python 中推断日期是否是 DST(夏令时)更改的实际日期?

    我想在Python中推断日期是否是一年中由于DST 夏令时 而改变小时的实际日期 与图书馆pytz您可以本地化日期时间 并且实际的 DST 更改已正确完成 此外 还有一个方法dst 图书馆的datetime这使您可以推断实际日期是夏季还是冬