关于日期计算的,百思不得其解
/*驱动程序*/
int main(int argc, char *argv[])
{
CDate today;
CDate charDate("20030224");
//charDate.addYear(2).addMon(1)--------------------------->运行运行结果比正常结果少一天
//charDate.addYear(2).addMon(1).addDay(1)----------------->运行运行结果比正常结果少两天
/*下面的结果正常*/
charDate.addYear(2);
charDate.addMon(1);
charDate.addDay(1);
cout << charDate.getYear() << endl;
cout << charDate.getMon() << endl;
cout << charDate.getDay() << endl;
CDate intDate(2003, 5, 19);
string str = "20030101";
CDate strDate(str);
return 0;
}
/*头文件*/
#ifndef DATE_H
#define DATE_H
#include <string>
class CDate
{
public:
CDate(const char * strDate);
CDate& addYear(int n);
CDate& addMon(int n);
CDate& addDay(int n);
private:
int y;
int m;
int d;
};
#endif
/*实现文件*/
CDate::CDate(const char * strDate)
{
char year[5];
char mon[3];
char day[3];
if (8 != strlen(strDate))
throw bad_date();
try
{
y = atoi(strncpy(year, strDate, 4));
m = atoi(strncpy(mon, strDate + 4, 2));
d = atoi(strncpy(day, strDate + 6, 2));
}
catch(...)
{
throw bad_date();
}
if (!isDate())
throw bad_date();
}
/*
* 函数名: add
* 功能 : 增加y年m月d日
* 参数 : int y, int m, int d 输入参数
* 说明 :
* 返回 : CDate&
*/
CDate& CDate::add(int yy, int mm, int dd)
{
struct tm tmstr;
tmstr.tm_year = y - 1900 + yy;
tmstr.tm_mon = m - 1 + mm;
tmstr.tm_mday = d + dd;
tmstr.tm_hour = 0;
tmstr.tm_min = 0;
tmstr.tm_sec = 0;
mktime(&tmstr);
y = tmstr.tm_year + 1900;
m = tmstr.tm_mon + 1;
d = tmstr.tm_mday;
return *this;
}
/*
* 函数名: addYear
* 功能 : 增加n年
* 参数 : int n 输入参数
* 说明 :
* 返回 : CDate&
*/
CDate& CDate::addYear(int n)
{
return add(n, 0, 0);
}
/*
* 函数名: addMon
* 功能 : 增加n月
* 参数 : int n 输入参数
* 说明 :
* 返回 : CDate&
*/
CDate& CDate::addMon(int n)
{
return add(0, n, 0);
}
/*
* 函数名: addDay
* 功能 : 增加n天
* 参数 : int n 输入参数
* 说明 :
* 返回 : CDate&
*/
CDate& CDate::addDay(int n)
{
return add(0, 0, n);
}