gpt4 book ai didi

datetime - 从仅日期开始计算夏令时

转载 作者:行者123 更新时间:2023-12-03 13:40:16 24 4
gpt4 key购买 nike

我正在使用Arduino和实时时钟芯片。该芯片可以补偿leap年,因此,它始终具有正确的日期,但是由于地区的复杂性,我认为它不能处理夏令时。时钟可以为我提供日,月,年(以1为基础)和星期几(星期日= 0到星期六= 6)。

因为我需要与用户输入的日期和时间进行比较,所以我需要知道为夏时制调整的日期和时间。如果当前日期是夏令时,我可以简单地从时钟开始增加一个小时,我便有了所需的东西。

困难的部分是确定我是否处于夏时制,因为它每年都会变化。我只关心它在我的位置(山区时间)是否有效。我的平台上似乎没有任何完整的日期库,无论如何我觉得那太过分了。是否有一个简单的公式来确定我是否在DST中?

最佳答案

这实际上看似简单。以下事实将对我们有所帮助:

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

  • 这些事实导致产生以下代码(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;
    }

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

    我编写了一个快速的单元测试,并验证了此代码与1800年至2200年之间的所有日期的 TimeZone.IsDayLightSavingsTime()一致。我没有考虑凌晨2点的规则,但是您可以轻松地进行检查,确定星期几是星期天,日期是在8到14(3月)或1到7(11月)之间。

    关于datetime - 从仅日期开始计算夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5590429/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com