仅从日期计算夏令时

2024-05-20

我正在使用 Arduino 和实时时钟芯片。该芯片补偿了闰年等,因此它始终具有正确的日期,但我认为由于区域复杂性,它不处理夏令时。时钟可以给出日、月、年(从 1 开始)以及星期几(星期日 = 0 到星期六 = 6)。

因为我需要与用户输入的日期和时间进行比较,所以我需要知道针对夏令时调整的日期和时间。如果当前日期是夏令时,我可以简单地在时钟时间上添加一个小时,我就得到了我需要的东西。

困难的部分是确定我是否处于夏令时,因为夏令时每年都会变化。我只关心它在我所在的位置(山区时间)是否有效。我的平台似乎没有任何全面的日期库,而且我觉得无论如何这都太过分了。有没有一个简单的公式可以确定我是否处于夏令时?


这实际上非常简单。有一些事实可以帮助我们:

  1. 在美国大部分地区,DST 从 3 月的第二个星期日开始,到 11 月的第一个星期日结束,两次都是凌晨 2:00。
  2. 3 月的第二个星期日始终在 8 日至 14 日之间(含 8 日和 14 日)。
  3. 11 月的第一个星期日始终在 1 日到 7 日之间(含 1 日和 7 日)。
  4. 星期编号非常方便,因为星期几将为您提供前一个星期日。

这些事实导致了以下代码(C#,但可以轻松移植到您的平台):

    public bool IsDST(int day, int month, int dow)
    {
        //January, february, and december are out.
        if (month < 3 || month > 11) { return false; }
        //April to October are in
        if (month > 3 && month < 11) { return true; }
        int previousSunday = day - dow;
        //In march, we are DST if our previous sunday was on or after the 8th.
        if (month == 3) { return previousSunday >= 8; }
        //In november we must be before the first sunday to be dst.
        //That means the previous sunday must be before the 1st.
        return previousSunday <= 0;
    }

事实证明,您甚至不需要知道年份即可执行此操作,只要您可以相信您的星期几值即可。

我编写了一个快速单元测试并验证了该代码是否符合TimeZone.IsDayLightSavingsTime()对于从 1800 到 2200 的所有日期。我没有考虑凌晨 2 点规则,但您可以轻松地检查星期几是否是星期日,并且日期是否在 8 日到 14 日(三月)或 1 日到 7 日(三月)之间十一月)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅从日期计算夏令时 的相关文章

随机推荐

  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • rvest 函数 html_nodes 返回 {xml_nodeset (0)}

    我正在尝试抓取以下网站的数据框 http stats nba com game 0041700404 playbyplay http stats nba com game 0041700404 playbyplay 我想创建一个表格 其中包
  • ffmpeg concat:“不安全的文件名”

    尝试将一堆 mts 文件转换为一个大 mp4 文件 stephan rechenmonster mnt backupsystem archive2 Videos 20151222 PRIVATE AVCHD BDMV bin ffmpeg
  • 使用 Selenium webdriver 和 Python 获取完全渲染的 HTML

    我正在尝试使用 Selenium webdriver 在 Python 中构建一个网络抓取工具 但是当我从 webdriver 检索网站源代码时 我无法访问所需的信息 我认为问题在于 一旦页面最初从服务器下载 内容就会通过 JavaScri
  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • Django 模型继承、重写字段

    我正在阅读 Python Web Development with Django 一书 我在书中找到了这个例子 class Book models Model title models CharField max length 100 ge
  • 将 numpy 舍入到最近的步骤

    我想知道如何将 numpy 中的数字舍入到上限或下限阈值 该阈值是预定义步长的函数 希望以更清晰的方式说明 如果我有数字 123 且步长等于 50 我需要将 123 舍入到最接近的 150 或 100 在本例中为 100 我得出了下面的函数
  • 文件“PyInstaller/loader/pyimod03_importers.py”,第 546 行,在 exec_module 中,ModuleNotFoundError:没有名为“x”的模块

    EDIT 我正在尝试导入algosec models在一个文件里面algobot包裹 我尝试添加 hidden import algosec 我还尝试在导入之前添加路径 使用sys path append algosec 这是我尝试运行该程
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • 使用 Pillow 时出错:ImportError:无法导入名称 _imaging

    我已经阅读了类似问题的答案 但似乎没有一个适合我的情况 当尝试使用 Pillow 时 我收到此错误 gt gt gt from PIL import Image Traceback most recent call last File
  • Presto/Trino - where 子句中的静态日期和时间戳

    我非常确定以下查询在 Presto 上对我有用 select segment sum count from modeling trends where segment 2557172 and date 2016 06 23 and coun
  • 使用 Parceler 与 Kotlin 数据类和构造函数进行序列化

    有没有办法使用Parceler https github com johncarl81 parceler使用 Kotlin 数据类和构造函数进行序列化 无需使用 ParcelProperty每个字段的注释 如果我尝试使用这样的库 Parce
  • gulp-sass 5 没有默认的 Sass 编译器;请自行设置

    插件 gulp sass 错误 信息 gulp sass 5 没有默认的 Sass 编译器 请自行设定 这俩sass and node sass包裹是允许的 例如 在你的 gulpfile 中 var sass require gulp s
  • 除非我在项目目录中,否则 Git 不会显示日志

    我正在尝试打电话git log当我在不同的目录中时 我经过的位置 git is git log Users Leica proj1 但它说 不是 git repo 如果我cd进入这个目录 就可以正常工作了 cd Users Leica Pr
  • 参数无效--model_config_file_poll_wait_seconds

    我正在尝试使用以下两个选项启动tensorflow serving 如文档中所示 docker run t rm p 8501 8501 v pwd models models tensorflow serving model config
  • 在 HTML5 中创建可拖动和可缩放的网格

    与其他 HTML5 不同如何创建网格问题 我想知道如何制作一个可拖动且可扩展的 绘制网格非常简单 var c document getElementById canvas var ctx c getContext 2d var width
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 使用 jQuery 清除 IMG

    我正在尝试从 a 中删除加载的图像 img 元素 但清除或删除 src 不会执行此操作 该怎么办 HTML img src https www google com images srpr logo3w png JQUERY img att
  • 仅从日期计算夏令时

    我正在使用 Arduino 和实时时钟芯片 该芯片补偿了闰年等 因此它始终具有正确的日期 但我认为由于区域复杂性 它不处理夏令时 时钟可以给出日 月 年 从 1 开始 以及星期几 星期日 0 到星期六 6 因为我需要与用户输入的日期和时间进