• 蔡勒公式和吉姆拉尔森公式计算星期几


    蔡勒公式

    众所周知,蔡勒公式在1582.10.4号之前和之后是不同的.
    这不是为了调整计算上的误差.
    而是历史上1582年10月更改历法,这一个月从4号跳到了15号,所以公式需要修改.
    但是大部分时候,计算机不会考虑这个事情(甚至大部分日历软件无法查询1900年以前的日子,有的话1582年也大多是错误的).
    所以我们可以把蔡勒公式的前面一段无视.

    int week(int y, int m, int d) {
    			if(m < 3) {m += 12, y -= 1;}
    			// 1582年10月4日或之前
    			// int w = (d + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 + 5) % 7;
    			// 1582年10月4日后
    			int w = (d + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
    			return (w + 7) % 7;
    		}
    

    吉姆拉尔森公式

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

    判断日期是否合法

    bool check_date(int y, int m, int d) {
    	if(1 <= m && m <= 12) {
    		if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) return 1 <= d && d <= 31;
    		else if(m == 2 && ((y % 100 != 0 && y % 4 == 0) || y % 400 == 0)) return 1 <= d && d <= 29;
    		else if(m == 2) return 1 <= d && d <= 28;
    		else return 1 <= d && d <= 30;
    	}
    	return false;
    }
    
  • 相关阅读:
    经典线程同步总结 关键段 事件 互斥量 信号量
    寄存器与缓存的区别
    自动变量
    进程的阻塞和挂起的区别
    经典线程同步 信号量Semaphore
    热门智力题 过桥问题和倒水问题
    经典线程同步 互斥量Mutex
    解决面试题的思路
    java.util.LinkedHashMap cannot be cast to
    E11000 duplicate key error index
  • 原文地址:https://www.cnblogs.com/zzidun-pavo/p/13160962.html
Copyright © 2020-2023  润新知