常见的日期处理手段

常见的定义如下

int month[13][2] = {{0,0},{31, 31}, {28, 29}, {31, 31}, {30, 30}, 
		{31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30},
	 	{31, 31}, {30, 30}, {31, 31}};

char monthname[13][15] = {{},{"January"}, {"February"}, {"March"}, 
		{"April"}, {"May"}, {"June"}, {"July"}, {"August"}, 
		{"September"}, {"October"}, {"November"}, {"December"}};

char week[7][15] = {{"Monday"}, {"Tuesday"}, {"Wednesday"}, 
		{"Thursday"}, {"Friday"}, {"Saturday"}, {"Sunday"}};

bool IsLeap(int year) // 闰年判断函数,闰年返回1(true),平年返回0(false)
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

其中char week 一般用于给你一个日期,然你算星期几。这里有两个算法,蔡勒公式及基姆拉尔森计算公式,感兴趣可自行百度。这里简单介绍第二个。

基姆拉尔森计算公式

w = (y + y /4 + y / 400 - y / 100 + 2 * m + 3 * (m + 1)/5 + d) % 7;
其中y表示年份,m表示月份,d表示日。

注意:在公式中有个与其他公式不同的地方:

把一月和二月看成是上一年的十三月和十四月,
例:如果是2004-1-10则换算成:2003-13-10来代入公式计算

注:w = 0代表的是星期一,w = 6代表的是星期日。

这也就是为什么定义char week[7][15],而不定义char week[8][15]。


int Date(int y,int m,int d)
{
	if(m==1||m==2)
	{
		m+=12;
		y--;
	}
	int week = (d + 2*m +3*(m+1)/5 + y + y/4 - y/100 + y/400)%7+1;//注意这里加了一。
	return week;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值