计算某个日期是星期几

计算某日是星期几

//主程序;

//----------------------------------------------+------------------------------------------------*/
//v1;计算星期;
//--计算某个日期是星期几,[可先判断某年1月1号是星期几;]
//----------------------------------------------+------------------------------------------------*/
//主程序;
//---------------------------------------------*/
//引用库;
#include <iostream>
using namespace std;
//声明本地函数;
int cWeek(int y, int m, int d);		//计算某日星期;
//---------------------------------------------*/
//v1;20210201;主函数;--计算星期;
int main()
{
	//定义字符窗口;
	system("title 计算星期");				//设置cmd窗口标题;
	system("mode con cols=33 lines=10");	//设置cmd窗口宽高=字符数;        
	//键盘输入;
	int year, month, day;
	cout <<"请输入: 年 月 日" <<endl;
	cin >>year >>month >>day;
	//计算及屏幕输出;
	int iweek = cWeek(year,month,day);	 //定义星期的整数iweek;[=0~6;]
	cout <<"星期";
	const char cnw[15] = "日一二三四五六"; //包括串尾符'\0';[即2*7+1;]
	//cout <<cnw[iweek*2]<<cnw[iweek*2+1] <<endl;	//下标索引;
	char *p = &cnw[0] +iweek*2;			//指针索引;--定义指针并赋值;
	cout <<*p<<*(p+1) <<endl;			//一个汉字由左右两部分点阵合成;

	system("pause");
	return 0;
}
//---------------------------------------------*/
/*/v0;20210127;主函数;
int main()
{
	//定义字符窗口;
	system("title 计算星期");				//设置cmd窗口标题;
	system("mode con cols=33 lines=10");	//设置cmd窗口宽高=字符数;        
	//键盘输入;
	int year, month, day;
	cout << "请输入: 年 月 日" <<endl;
	cin >>year >>month >>day;
	//计算及屏幕输出;
	int iweek=cWeek(year,month,day);	 //星期的整数iweek=0~6;
	const char cnw[15]="一二三四五六日"; //包括串尾符'\0';[即2*7+1;]
	//cout <<"星期" <<cnw[iweek*2]<<cnw[iweek*2+1] <<endl;
	char *p=&cnw[0]+iweek*2;			//定义指针并赋值;
	cout <<"星期" <<*p<<*(p+1) <<endl;	//一个汉字由左右两部分点阵合成;
	
	system("pause");
	return 0;
}
//----------------------------------------------+------------------------------------------------*/

//定义本地函数;

//---------------------------------------------*/
/*/公式说明;
  1.使用基姆拉尔森公式计算星期: [星期1到7对应余数0到6;] 
	Wk= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7;
  2.按习惯修正基姆拉尔森公式;[星期日到六对应余数0到6;] 
	Wk= (d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400) %7; 
	公式中d表示日, m表示月, y表示年;
	设公元0年1月1日为星期日,以3月1日星期3为计算起点;
	公式包括四个部分;其中:
		d+1是星期日修正;[星期日到六对应余数0到6;]
	    +2*m+3*(m+1)/5是月差计算;
	    +y是年差;[因平年365%7=1;故每年+1;]
		+y/4-y/100+y/400是闰年计算;
	其中重点是月差计算: 
	    因平年2月为28天,其月差为0;则小月月差为2;大月月差为3;
	    设该年月份为3~14月,包括下年1~2月;
	   [其目的是将2月闰年放到当年最后,以便简化计算公式;] 
  3.特别注意:
	在公式中把1月和2月看成是上一年的13月和14月;
	即语句 if (m==1 || m==2){ m+=12; y--;}
	例如:2021-1-27看成 2020-13-27来代入公式计算;
//---------------------------------------------*/
//v1;20210201;计算星期cWeek;[=Calculate Week;基姆拉尔森公式;]
int cWeek(int y, int m, int d)		//计算某日星期;
{
	if(m==1 ||m==2){ m+=12; y--; }
	int wk=(d + 2*m+3*(m+1)/5 + y + y/4-y/100+y/400) %7;
	return (wk+1)%7;				//修正映射;[星期日对应0;]
}
//---------------------------------------------*/
/*/v0;20210127;计算星期cWeek;[=Calculate Week;基姆拉尔森公式;]
int cWeek(int y, int m, int d)		//计算某日星期;
{
	if(m==1||m==2){ m+=12; y--; }
	int wk=(d + 2*m+3*(m+1)/5 + y + y/4-y/100+y/400) %7;
	return wk;						//原映射;[星期日对应6;]
}
//----------------------------------------------+------------------------------------------------*/
//----------------------------------------------+------------------------------------------------*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值