Clase de cálculo de fecha

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

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

1. Año, mes, día -> semana X

1. Kim Larson: w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4-y / 100 + y / 400)% 7 // w: 0: semana uno ... .etcétera

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. Fórmula de Zeiler: w = (y + y / 4 + c / 4-2 * c + 26 * (m + 1) / 10 + d-1 + 7)% 7 // w: 0: domingo ... Así sucesivamente

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: descripción del símbolo de fórmula:
w: 0: domingo ... y así sucesivamente (el último +7 se debe a que se consideran números negativos)
c: siglo-1 (los dos primeros dígitos de
y ) y: año (los dos últimos dígitos de y)
m: Mes (m> = 3 && m <= 14, es decir, en la fórmula de Zeiler y la fórmula de Kim Larson, enero y febrero de un año deben calcularse como los meses 13 y 14 del año anterior, como : 1 de enero de 2003 -> 13 de 2002)
d: día

 

[]: Representa redondeo (aquí es exactamente redondeo hacia abajo), es decir, siempre que la parte entera.

Supongo que te gusta

Origin blog.csdn.net/weixin_43871207/article/details/109321001
Recomendado
Clasificación