如何计算某一天是星期几?

公式

  蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。

  若要计算的日期是在1582年10月4日或之前,公式则为

  

  以1582年9月3日为例:

  1582年9月3日后:w = (d + 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;

  1582年9月3日前:w = (d+2*m+3*(m+1)/5+y+y/4+5) % 7;

  注意

  当年的1,2月要当成上一年的13,14月进行计算

符号意义

  w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六

  c:世纪(年份前两位数)

  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周年国庆)是星期五。

  再比如计算2006年4月4日,过程如下:

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

    =6+[6/4]+[20/4]-2*20+[26*(4+1)/10]+4-1

    =-12 (除以7余5,注意对负数的取模运算!实际上应该是星期二而不是星期五)

  w=(-12%7+7)%7=2;

适用范围

  不过,蔡勒公式只适合于1582年(中国明朝万历十年)10月15日之后的情形。罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。

  后来人们将这一新的历法称为“格里高利历”,也就是今天世界上所通用的历法,简称格里历或公历。

代码

 1 #include <stdio.h>
 2
 3 int main()
 4 {
 5     int year, month, day, c, y, w;
 6     char b[7][10] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" };
 7     scanf("%d%d%d", &year, &month, &day);
 8     if (month < 3)
 9     {
10         year--;
11         month += 12;
12     }
13     c = year / 100;
14     y = year % 100;
15     w = (c / 4) - 2 * c + (y + y / 4) + (13*(month + 1) / 5) + day - 1;
16     w = (w % 7 + 7) % 7;
17     puts(b[w]);
18     return 0;
19 }
时间: 2024-12-28 20:29:17

如何计算某一天是星期几?的相关文章

计算任意一天是星期几

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

//输出电脑系统的年月日星期以及时间

//输出电脑系统的年月日星期以及时间 var nowDate = new Date(); var year = nowDate.getFullYear(); var day = nowDate.getDate() < 10 ? "0" + nowDate.getDate(): nowDate.getDate(); var hours = nowDate.getHours() <10 ? "0" + nowDate.getHours(): nowDate.

C语言实现时间差、星期、天数算日期(转)

原文地址:http://blog.csdn.net/coder_xia/article/details/6566708 最近因为一个项目需要,默认一个时间值,即当天的前一天日期,顺手就将其他的几个功能一并实现了,主要为 1.两个日期之间的时间差 2.某个日期之后,绝对值差值之后的某个日期 3.某年日期,算出星期几 下面见源码: #ifndef CALCULATE_H #define CALCULATE_H typedef struct { int year; int month; int day

输入年月日计算是星期几

偶然的机会看到了一个计算星期几的算法,感觉很怪异并且很有意思就记录一下,也与大家共勉.自己写的代码有些瑕疵,但重点是计算星期的算法值得思索. 问题:输入年月日计算是星期几? 代码如下: #include <stdio.h>int getWeek(int year, int month, int day){ int aWeek[12] = {0,3,2,5,0,3,5,1,4,6,2,4}; int week = 0; int temp = 0; if(year < 1 || month

安卓开发学习日记(一个星期)

目前进度:开始了一个星期,开始了解JAVA一些常用命令和算法等,能够独立写出一些简单的程序. 学习方法:使用番茄工作法(可使用APP番茄土豆,很好用),计算机科学导论和JAVA语言程序设计交替看,偏重JAVA,不理解的地方找网上视频反复观看理解. 学习兴趣:比较大. 学习效率:一般 日学习时间:3-4小时. 最近学习时间减少了,这点应该反省.一个星期的时间,学习的东西并不多: 基本数据类型,常量,变量,赋值,操作符,选择语句,循环语句,字符串,再写了一些如计算闰年/计算税率等十分简单的程序 ,这

js如何计算一个字符在字符串中出现的次数

js如何计算一个字符在字符串中出现的次数:在实际应用中可能要计算一个字符在字符串中出现的次数,实现此功能的方式有多种,下面就介绍一个非常简单的方式.代码实例如下: function func(str,char) { var str=str; var num=(str.split(char)).length-1; return num } document.write(func("abcdefga","a")); 以上代码可以实现计算一个字符串中指定字符出现的次数.相

javascript如何计算两个日期之间的时间间隔

javascript如何计算两个日期之间的时间间隔:有时候我们需要获取两个日期之间的时间间隔,下面是一段比较常用且兼容所有浏览器的代码,希望能够需要的带来一定帮助.代码如下: function NewDate(str) { str=str.split('-'); var date=new Date(); date.setUTCFullYear(str[0], str[1] - 1, str[2]); date.setUTCHours(0, 0, 0, 0); return date; } fun

星期几的计算 (if语句)

public boolean chackyear(int str) {// 判断平年,闰年 boolean q = str % 4 == 0; boolean w = str % 100 == 0; boolean e = str % 400 == 0; boolean r = false; if (q) { if (w == false || e) { r = true; } } return r; } public String chackday(int year, int month, i

C语言(7)--高精度加法、减法、乘法、今天是星期几、四位平方数、候选人选票问题

1.高精度加法.减法.乘法 #include <stdio.h> #include <string.h> #include <malloc.h> void plus(char *a,char *b,char *c);//自定义高精度加法函数 void sub(char *a,char *b,char *c);//自定义高精度减法函数 void multiply(char *a,char *b,char *c);//自定义高精度乘法函数 int main() { char