我使用Sakamoto的算法来查找给定日期的星期几.谁能告诉我这个算法的正确性?我想从2000年到2099年.
维基百科的算法仅供参考.
int dow(int y, int m, int d)
{
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
Run Code Online (Sandbox Code Playgroud) 我通过端口 0x70 和 0x71 直接读取/写入 RTC。根据手册,工作日字节将保存星期几,Sunday=1,值范围从 1 到 7。当我读取今天得到的字节 4 时,即星期三。而当我阅读 RTC 信息时,hwclock -r日期是星期四,这是正确的。
将日期设置hwclock为其他日期并使用我的代码读取它不会反映工作日字节的变化。
此问题在所有系统中都存在。可能是什么问题?
int m = 5, d = 12, y = 1975, val;
// May 12, 1975
Run Code Online (Sandbox Code Playgroud)
有人可以在下面的代码行中解释逗号运算符的功能/目的:
val = (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7;
Run Code Online (Sandbox Code Playgroud)
在上述行写由麦克·基思来计算给定日期(d =天,M =月,Y =年)一周中的一天.其中星期日= 0,星期一= 1,星期二= 2,星期三= 3,星期四= 4,星期五= 5,星期六= 6.我知道如果d + = m <3,则y--执行,否则y -2执行.我不明白的是y-2之后逗号的目的.