zoukankan      html  css  js  c++  java
  • 蔡勒公式和吉姆拉尔森公式计算星期几

    蔡勒公式

    众所周知,蔡勒公式在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;
    }
    
  • 相关阅读:
    Jenkins 插件管理
    持续集成 目录
    gitlab 目录
    jenkins 目录
    POJ 2828
    POJ 2782
    POJ 2725
    POJ 2769
    POJ 2739
    POJ 2707
  • 原文地址:https://www.cnblogs.com/zzidun-pavo/p/13160962.html
Copyright © 2011-2022 走看看