简简单单 8H/32G系列单片机RTC专用的星期计算代码
最近看到了很多关于RTC的应用贴,我也跟风发一个 8H/32G系列单片机RTC专用的日期换算星期极简代码: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)代码非常非常简单,只有两行,只定义了一个偏移码表和计算星期的宏定义,这个码表支持2000~2099年之间的星期计算,也可以通过修改码表支持其它年份范围的计算,欢迎各路大佬验证代码和讨论原理,也欢迎交流更精简的版本。
调用方法非常简单,直接把WEEK当成寄存器使用即可:
printf("%02bu-%02bu-%02bu %02bu:%02bu:%02bu-%03bu %bu\r\n",YEAR,MONTH,DAY,HOUR,MIN,SEC,SSEC,WEEK);带入一个日期,验算过程如下:
比如2024年11月30日
((6+weekdata[11-1]+24+30+24/4)%7) = (6+3+24+30+6)% 7 = 69 % 7 = 6 = 星期六
结果正确!!
{:4_174:} 这个不错啊。就2行 计算第几周的??
lzzasd 发表于 2024-7-4 20:36
计算第几周的??
计算星期几的,0应该是星期天 公式不错
不想算的,就读,哈哈
接收←{"success":"1","result":{"timestamp":"1720104168","datetime_1":"2024-07-04 22:42:48","datetime_2":"2024年07月04日 22时42分48秒","week_1":"4","week_2":"星期四","week_3":"周四","week_4":"Thursday"}} 学习 收藏了{:4_250:} 给您点个赞{:4_250:} {:4_165:}顶,谢谢分享