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


    蔡勒公式

    众所周知,蔡勒公式在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;
    }
    
  • 相关阅读:
    脚本——猜拳
    脚本——基础命令
    脚本——1-100奇数的和
    脚本——判断文件类型
    脚本——判断分数是否合格
    脚本——判断服务是否开启
    脚本——ping一个网址三次
    脚本——判断是否root用户
    脚本——查看目录是否存在
    第十八天:CSV、JSON、Excel、SQLite
  • 原文地址:https://www.cnblogs.com/zzidun-pavo/p/13160962.html
Copyright © 2020-2023  润新知