晓飛飛 发表于 2024-11-30 17:49:15

本帖最后由 晓飛飛 于 2024-11-30 17:50 编辑

omnsvwle 发表于 2024-11-30 17:45
改了你的代码现在更偏了
我在19楼有带入今天的日期详细验算过程,计算结果是6,至于你的显示为啥错误,建议查查别的地方。
另外,建议你把年也显示出来,看看RTC寄存器的实际值是多少,包括计算后的星期用数字显示出来

omnsvwle 发表于 2024-12-2 08:06:58

晓飛飛 发表于 2024-11-30 17:40
区别在这里,你没搞清楚原理,抄又抄的不细心,你改一下再试。

((6+weekdata+month+day+year/4 ...

修改好了,非常感谢{:4_237:}

21cnsound 发表于 2025-2-10 09:27:52

晓飛飛 发表于 2024-11-19 23:14
我天天用的,目前没发现任何问题,而且通过修改数组里面的数字,可以支持任意日期段的,再者,验证这个非 ...

在excel中验证了一下,闰年的1月和2月计算出来比实际多1
比如,24年1月1日计算出来是周二(多1),而23年12月31日是周日。

晓飛飛 发表于 2025-2-10 10:51:47

21cnsound 发表于 2025-2-10 09:27
在excel中验证了一下,闰年的1月和2月计算出来比实际多1
比如,24年1月1日计算出来是周二(多1),而23年 ...

闰年是从2月份结束时开始补一天的,但公式是从1月份就开始补了,这个我优化一下bug

晓飛飛 发表于 2025-2-10 14:40:23

21cnsound 发表于 2025-2-10 09:27
在excel中验证了一下,闰年的1月和2月计算出来比实际多1
比如,24年1月1日计算出来是周二(多1),而23年 ...

麻烦您验证一下这个代码,看是否可行    unsigned char code weekdata={0,3,3,6,1,4,6,2,5,0,3,5};
#define WEEK((6+weekdata+YEAR+DAY-(((YEAR % 4) || (MONTH > 2))?0:1) + YEAR/4)%7)

21cnsound 发表于 2025-2-10 15:34:08

晓飛飛 发表于 2025-2-10 14:40
麻烦您验证一下这个代码,看是否可行

100年全部准确

21cnsound 发表于 2025-2-10 15:39:52

优化建议:
unsigned char code weekdata={0,6,9,9,12,7,10,12,8,11,6,9,11};
#define WEEK((weekdata+YEAR+DAY-(((YEAR % 4) || (MONTH > 2))?0:1) + YEAR/4)%7)

晓飛飛 发表于 2025-2-10 17:13:45

21cnsound 发表于 2025-2-10 15:39
优化建议:
unsigned char code weekdata={0,6,9,9,12,7,10,12,8,11,6,9,11};
#define WEEK((weekdat ...

好的谢谢!我这个代码就是100年范围内使用的,大多数RTC芯片的年寄存器也就8位的。
页: 1 2 [3]
查看完整版本: 简简单单 8H/32G系列单片机RTC专用的星期计算代码