相对日期法计算日期差

WitchElaina

WitchElaina
前言
C++大作业编写银行系统中问到了计算日期差的方法, 在此记录一种方便快捷的相对日期法, 同时收录一些日期计算相关的其他细节问题, 具体如下
正文
闰年判断
众所周知, 当一个非整百年的年份能够被4
整除时, 该年份为闰年; 当一个整百年份能被400
整除时, 该年份为闰年.
在Date
类中编写isLeap
函数判断一个年份是否为闰年, 代码如下
bool Date::isLeap(int m_year)
{
if((m_year%100==0||m_year%400==0)&&(m_year%4==0||m_year%100!=0))
return true;
else
return false;
}
建表
由于一年中每月天数不同, 在计算当年内两日期天数差时不方便, 可以采用建表查表的方法创建一个数组, 记录每月一号到当年一月一号的天数
程序中, 使用DAYS_EACH_MONTH
数组存放这组数据
// date.h
const int DAYS_EACH_MONTH[]={0,31,59,90,120,151,181,212,243,273,304,334,365};
计算相对日期
计算每个日期距离1年1月1日
的天数, 再用欲求的两个日期的相对日期天数作减法, 算得两日期相距的天数.
使用date_trans
函数将一个Date
类由绝对日期转换成相对日期
// date.h
class Date
{
// ...
public:
int date_trans();
// ...
}
计算year年month月day日
的相对日期步骤如下
计算年
首先计算year年1月1日
距1年1月1日
的天数差, 由于月日均相同, 至于要计算相差几年即可, 过程中需要注意, 闰年有366
天, 判断该年为闰年时需要为总天数再+1
代码如下
// date.cpp
int Date::date_trans()
{
int day_sum=0;
for(int i=1;i<get_year();i++)
{
// 每年增加365天
day_sum+=365;
// 有闰年多加1天
if(isLeap(i))
day_sum++;
}
// ...
计算月
根据之前建立的DAYS_EACH_MONTH
数组, 快速获得month月1日
距离1月1日
的天数并加入总和中
代码如下
// ...
day_sum+=DAYS_EACH_MONTH[get_month()-1];
// ...
计算日
由于前面已经算得年月之间的日期差, 此时只需求出year年month月1日
距离year年month月day日
的天数差, 将日期中的day
加入天数总和中即可
// ...
day_sum+=get_day();
return day_sum;
}
计算天数差
使用date_trans
函数获得两日期的相对日期值, 再作差即可得到两日期的天数差
// date.cpp
int Date::date_cal(Date m_date)
{
return -m_date.date_trans()+date_trans();
}