计算任何一天是星期几的几种算法
一:常用公式

W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D

Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。

二:蔡勒(Zeller)公式

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

公式中的符号含义如下,w:星期;c:世纪;y:年(两位数); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。

相比于通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。

三:对蔡勒(Zeller)公式的改进

相比于另外一个通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。不过,笔者给出的通用计算公式似乎更加简洁(包括运算过程)。现将公式列于其下:
W=[y/4]+r (y/7)-2r(c/4)+m’+d

公式中的符号含义如下,r ( )代表取余,即只要余数部分;m’是m的修正数,现给出1至12月的修正数1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=5;5’=0;6’=3;8’=1;(9’,12’)=4(注意:在笔者给出的公式中,y为润年时1’=5;2’=1)。其他符号与蔡勒(Zeller)公式中的含义相同。

四:基姆拉尔森计算公式

这个公式名称是我给命名的,哈哈希望大家不要见怪。

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. #include <iostream>
  2. #include <string>
  3. #include <stdio.h>
  4. using namespace std;
  5. // ************************************************
  6. //  str_week
  7. //
  8. /// <summary>
  9. /// 返回谋年某月任意一天是星期几的描述
  10. /// </summary>
  11. //y:年,m:月,d:日。在参数都只传入相应的整数
  12. // ********************************************/
  13. string str_week(int y,int m,int d){
  14. int a=7; // 用来保存计算得到的星期几的整数
  15. string str_date="";
  16. if((m==1)||(m==2))//如果是一月或二月进行换算
  17. {
  18. m+=12;
  19. y--;
  20. }
  21. a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;   //得到的星期几的整数
  22. switch (a){
  23. case 0:
  24. str_date="星期一";
  25. break;
  26. case 1:
  27. str_date="星期二";
  28. break;
  29. case 2:
  30. str_date="星期三";
  31. break;
  32. case 3:
  33. str_date="星期四";
  34. break;
  35. case 4:
  36. str_date="星期五";
  37. break;
  38. case 5:
  39. str_date="星期六";
  40. break;
  41. case 6:
  42. str_date="星期日";
  43. break;
  44. }
  45. return str_date;
  46. }
  47. int main()
  48. {
  49. int y, m, d;
  50. cout << "输入日期:如 2012-03-30" << endl;
  51. scanf("%d-%d-%d", &y, &m,&d);
  52. cout << str_week(y, m, d) << endl;
  53. }
 

08--MOOC--C/C++ 根据年月日计算星期几的更多相关文章

  1. Gym 101206L Daylight Saving Time 根据年月日计算星期

    题意: [3月的第二个周日02:00:00 , 3月的第二个周日03:00:00) 这个区间都不是PST或PDT,[11月的第一个周日01:00:00 , 11月的第一个周日02:00:00) 这个区 ...

  2. An problem about date 根据年月日计算 星期几

    /W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7(1.2月需要看作上一年的13.14月) #include<stdio.h> #include& ...

  3. C# 根据日期计算星期几

    region 根据年月日计算星期几(Label2.Text=CaculateWeekDay(,,);) /// <summary> /// 根据年月日计算星期几(Label2.Text=C ...

  4. 编写Java程序随机输入日期计算星期几,打印任意一年的日历

    需求说明: 随机输入日期计算星期几,打印任意一年的日历 已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几 实现思路: 一.知道1900年1月1日为星期一,求输入的年份月份与1900年1 ...

  5. 根据日期计算星期几----蔡勒(Zeller)公式推导

    计算给定日期是星期几,好象是编程都会遇到的问题,最近论坛里也有人提到这个问题,并给出了一个公式:             W=   (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400 ...

  6. C#实现根据日期计算星期

    /// <summary> /// 根据日期返回 星期(返回结果为英文) /// </summary> /// <param name="date"& ...

  7. Project Euler 19 Counting Sundays( 蔡勒公式计算星期数 )

    题意:在二十世纪(1901年1月1日到2000年12月31日)中,有多少个月的1号是星期天? 蔡勒公式:计算 ( year , month , day ) 是星期几 以下图片仅供学习! /****** ...

  8. Android由出生年月日计算年龄(周岁)

    先从String类型的出生日期(“yyyy-MM-dd”)中提取int类型的年.月.日:再计算岁数. 程序如下: /** * 根据出生日期计算年龄的工具类BirthdayToAgeUtil */ pu ...

  9. oracle根据日期计算星期几

    工作中用到的,在存储过程中的语句,简单记下: /** 判断输入日期是星期几 */ select decode(to_char(to_date(iv_date,'yyyy-mm-dd'), 'day') ...

随机推荐

  1. 如何修改cnblogs的文本编辑器

    我发现从别处复制过来的文本,文字上下间隔太大,所以我点击“html”标签,然后,把html内容复杂到记事本里,用记事本替换的功能,把“<p>”替换为“<p style="p ...

  2. 怎么去掉Word文字下面的波浪线

    Word文字下面的红色波浪线怎么去掉?在word办公软件操作中,可能会遇到一个小问题,就是文字下面有红色绿色的波浪线,看起来感觉不舒服.其 实这是软件自动给你检查语法等错误标出来的,红色的表示系统认为 ...

  3. asp.net--解决上传文件大小限制

    原文地址 第一种方法,主要适用于IIS6.0版本 一.修改配置Web.Config文件中的httpRuntime节点 对于asp.net,默认只允许上传4M文件,增加如下配置,一般可以自定义最大文件大 ...

  4. CF #328div2 D

    这题不难,当时想出来了,可是却写不出来~~ 现在慢慢写回来,也写得好挫~ 可以知道,被攻击的城市必定可以组成一棵树,然后,传送到的点必定也是城市之一.如果出发后回到原点,则需要2E,E是树的边数,则2 ...

  5. java Regex

    超全 http://www.rexegg.com/regex-lookarounds.html 这篇文章不错:http://www.cnblogs.com/lzq198754/p/5780340.ht ...

  6. @SpringBootApplication注解

    @SpringBootApplication注解表明了SpringBoot的核心功能,即自动配置. @SpringBootApplication(主配置类): @SpringBootConfigura ...

  7. bzoj4241 历史研究——分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4241 就是分块,预处理出从第 i 块到 j 位置的答案,以及从第 i 块到最后位置间每个数出 ...

  8. mount -o remount,rw /

    init=/bin/sh mount -o remount,rw /; sed -i 's/指定字符串/&希望插入的字符串/' 文件 在一文件中指定的字符后插入内容 sed -i 's/指定的 ...

  9. hihoCoder 1187

    今天BC爆0了....但是日子还是要过的....要回学校毕业了~~大学就这么“荒废”了. 这个是hihoCoder的1187,比较基础的一道题. 题目链接: http://hihocoder.com/ ...

  10. 大数据攻城狮之Hadoop伪分布式篇

    对于初学大数据的萌新来说,初次接触Hadoop伪分布式搭建的同学可能是一脸萌笔的,那么这一次小编就手把手的教大家在centos7下搭建Hadoop伪分布式. 底层环境: VMware Workstat ...