日付計算クラス

https://www.cnblogs.com/woxiaosade/p/11829060.html

https://blog.csdn.net/Dream_Weave/article/details/80487951

1.年、月、日->週X

1.キム・ラーソン: w =(d + 2 * m + 3 *(m + 1)/ 5 + y + y / 4-y / 100 + y / 400)%7 // w:0:第1週。 。等々

int cal1(int y,int m,int d)
{
    if(m==1||m==2)
        m+=12,y--;
    int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
    return ++w;
}

2. Zeilerの式: w =(y + y / 4 + c / 4-2 * c + 26 *(m + 1)/ 10 + d-1 + 7)%7 // w:0:日曜日...などなど

int cal2(int y,int m,int d)
{
    if(m==1||m==2)
        m+=12,y--;
    int c=y/100,ty=y%100;
    int w=ty+ty/4+c/4-2*c+26*(m+1)/10+d-1;
    return w%7==0?7:(w+7)%7;
}

Ps:数式記号の説明:
w:0:日曜日...など(後者の+7は、負の数が考慮されるためです)
c:世紀-1(
yの最初の2桁)y:年(最後の2桁) of y)
m:月(m> = 3 && m <= 14、つまり、Zeilerの式とKim Larsonの式では、1年の1月と2月は、次のように前年の13か月と14か月として計算する必要があります。 :2003年1月1日-> 2002年1月13日)
d:日

 

[]:丸め(ここでは正確に切り捨てられます)、つまり整数部分である限りを表します。

おすすめ

転載: blog.csdn.net/weixin_43871207/article/details/109321001