C/C++根据年月日计算星期几(蔡勒公式篇)

蔡勒公式  蔡勒(Zeller)公式:是一个计算星期的公式。

随便给一个日期,就能用这个公式推算出是星期几。

蔡勒公式如下:

W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1

或者是:

w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符号含义如下:

  • w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
  • c:世纪-1(前两位数)
  • y:年(后两位数)
  • m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
  • d:日  [ ]代表取整,即只要整数部分。

下面以中华人民共和国成立100周年纪念日那天(2049年10月1日)来计算是星期几,过程如下:

w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
 =49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1
 =49+[12.25]+5-40+[28.6]
 =49+12+5-40+28
 =54 (除以7余5)

即2049年10月1日(100周年国庆)是星期五。

再比如计算2013年3月7日,过程如下:

w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
 =13+[13/4]+[20/4]-2*20+[26*(3+1)/10]+7-1
 =-3 (除以7余4,注意对负数的取模运算!)

示例代码:

int ReturnWeekDay( unsigned int iYear, unsigned int iMonth, unsigned int iDay )
{
	int iWeek = 0;
	unsigned int y = 0, c = 0, m = 0, d = 0;

	if ( iMonth == 1 || iMonth == 2 )
	{
		c = ( iYear - 1 ) / 100;
		y = ( iYear - 1 ) % 100;
		m = iMonth + 12;
		d = iDay;
	}
	else
	{
		c = iYear / 100;
		y = iYear % 100;
		m = iMonth;
		d = iDay;
	}

	iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; //蔡勒公式
	iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 ); //iWeek为负时取模
	if ( iWeek == 0 ) //星期日不作为一周的第一天
	{
		iWeek = 7;
	}

	return iWeek;
}

总结

到此这篇关于C/C++根据年月日计算星期几(蔡勒公式篇)的文章就介绍到这了,更多相关C/C++计算星期几内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++基于蔡基姆拉尔森计算公式实现由年月日确定周几的方法示例

    本文实例讲述了C++基于蔡基姆拉尔森计算公式实现由年月日确定周几的方法.分享给大家供大家参考,具体如下: #include <iostream> #include <string> using namespace std; int whatday(int y, int m, int d) { // 返回正确的星期.用 0 - 6 表示 星期 1 - 7 if(m==1||m==2) { y--; m+=12; } return(d+2*m+3*(m+1)/5+y+y/4-y/100

  • C/C++根据年月日计算星期几(蔡勒公式篇)

    蔡勒公式  蔡勒(Zeller)公式:是一个计算星期的公式. 随便给一个日期,就能用这个公式推算出是星期几. 蔡勒公式如下: W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 或者是: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 公式中的符号含义如下: w:星期: w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c:世纪-1(前两位数) y:年(后两位数) m:

  • C#根据年月日计算星期几的函数

    DateTime.Now.ToString("dddd",new System.Globalization.CultureInfo("zh-cn")); 今天在网上看见一些关于 C#实现的根据年月日计算星期几 的介绍: 算法如下: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数,m表示月份数,y表示年数. 注意:在公式中有个与其他公式不同的地方:  把一月和二月看成是上一年的十

  • C#根据年月日计算星期几的函数小例子

    算法如下: 基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7  在公式中d表示日期中的日数,m表示月份数,y表示年数.注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算.代码如下: 复制代码 代码如下: //y-年,m-月,d-日期  string CaculateWeekDay(int y,int m, int d)  {  if(

  • JS实现处理时间,年月日,星期的公共方法示例

    本文实例讲述了JS实现处理时间,年月日,星期的公共方法.分享给大家供大家参考,具体如下: 在项目中用到的,用js 来得到年月日,星期,当前多少个周的函数,备忘在这里,以后参考. Date.prototype.getWeek = function(){ var firstDayOfYear = new Date(this.getFullYear(),0,1); var millOfDay = 24*60*60*1000; return Math.ceil((((this - firstDayOfY

  • C#根据日期计算星期几的实例代码

    本示例采用基姆拉尔森计算公式来根据日期计算未来日子是星期几: 首先看下百度百科的基姆拉尔森计算公式定义: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数,m表示月份数,y表示年数. 注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算. 1.客户端(采用ajax方式调用): $.get('Caculate

  • jQuery简单实现根据日期计算星期几的方法

    本文实例讲述了jQuery简单实现根据日期计算星期几的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

  • Python简单计算给定某一年的某一天是星期几示例

    本文实例讲述了Python简单计算给定某一年的某一天是星期几.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #计算某特定天使星期几 #蔡勒公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 import math dict = {1: "星期一", 2: "星期二", 3: "星期三", 4: "星期四", 5: "星期五", 6: "星

  • C++实现简易万年历

    本文实例为大家分享了C++实现简易的万年历,供大家参考,具体内容如下 代码如下: /* *文件名称:万年历.cpp *作 者:chenghan *完成日期:2019/1/10 *版 本 号:1.0 *问题描述:制作一个简单的万年历 */ #include<iostream> #include <string> using namespace std; //判断一年是否为闰年,是返回true 否返回false bool isleapyear(int year); //兔子图案 voi

  • C#基于基姆拉尔森算法计算指定日期是星期几的方法

    本文实例讲述了C#基于基姆拉尔森算法计算指定日期是星期几的方法.分享给大家供大家参考.具体分析如下: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数,m表示月份数,y表示年数. 注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算. #region 根据年月日计算星期几(lblDate.Text=Cacu

  • 日历查询的算法 如何计算某一天是星期几

    如何计算某一天是星期几? -- 蔡勒(Zeller)公式 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式.即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 公式中的符号含义如下,w:星期:c:世纪-1:y:年(两位数):m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1.2月要看作上一年的13.14月来计算,比如2003年1月1日要看作2002年的13月1日

随机推荐