关于日期计算的,百思不得其解

coolblue 2003-05-15 04:22:01
/*驱动程序*/
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);
}



...全文
84 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧