用C++实现 输入一个日期 然后加任意天数后,输出正确的日期!
比如你输入2011年1月23号然后加55天输出2011年3月8号,如果输入的天数是450天,也要正确计算出来!...
比如你输入2011年1月23号 然后加55天 输出 2011年3月8号,如果输入的天数是450天,也要正确计算出来!
展开
2个回答
展开全部
肯定只能说伪码,代码要自己写
假设为Y1 M1 D1, Y2 M2 D2
(0) 基本准备
计算好每个月一号离1.1号有多少天放在一个数组里面(按不是闰年算),以后要用到;
int days[]= ;
(1)年月合法性检查(开始日期和结束日期)
a. 年份 在1900到3000
b. 月份 在1到12
(2)取得两个日期中当月的最大天数
比如1900.1.11 ~ 1991.2.25 则为Day_Max_Start= 31和Day_Max_End = 28
(3)判断日是否有效D1 <=Day_Max_Start而且D2<=Day_Max_End才有效
(4)计算1900.1.1年到1991.1.1有Sum天
(5)
Sum = Sum + days[M2] + D2 - (days[M1]+D1);
(6)前后闰年的判断
if
Sum = Sum -1;
if
Sum = Sum + 1;
自己在检查检查,比如
1900.1.1到1900.1.2是要算成1天还是两天.这也是个问题.
假设为Y1 M1 D1, Y2 M2 D2
(0) 基本准备
计算好每个月一号离1.1号有多少天放在一个数组里面(按不是闰年算),以后要用到;
int days[]= ;
(1)年月合法性检查(开始日期和结束日期)
a. 年份 在1900到3000
b. 月份 在1到12
(2)取得两个日期中当月的最大天数
比如1900.1.11 ~ 1991.2.25 则为Day_Max_Start= 31和Day_Max_End = 28
(3)判断日是否有效D1 <=Day_Max_Start而且D2<=Day_Max_End才有效
(4)计算1900.1.1年到1991.1.1有Sum天
(5)
Sum = Sum + days[M2] + D2 - (days[M1]+D1);
(6)前后闰年的判断
if
Sum = Sum -1;
if
Sum = Sum + 1;
自己在检查检查,比如
1900.1.1到1900.1.2是要算成1天还是两天.这也是个问题.
追问
我自己写出来了!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*-----------------------------------------------------------------*\
author: wanfustudio
mail : wanfu.liu@163.com
Rights: 任意拷贝,修改,传播包括商业使用
Q & A :
如何疑问,以及想法,不满足的需求
欢迎来函!!!
\*-----------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>
/*这段是注释,放在此处用以说明各个成员的含义,在time.h中定义*/
#if 0
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};
#endif
/*-----------------------------------------------------------------*\
全局变量
\*-----------------------------------------------------------------*/
/* 数组与下面tm结构中定义的tm_wday取值范围相对应 */
const char *Week[]=
{
"星期天",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
};
/*-----------------------------------------------------------------*\
函数声明
\*-----------------------------------------------------------------*/
/* 一年中第X天是星期几 */
void GetWeekDay(int year,int num);
/* X年X月X日是一年中的第X天,星期几 */
void GetSomeDay(int year, int mon, int day);
/* X年X月X日再过X天是一年中的第X天,星期几 */
void GetNextTime(int year, int mon, int day,int num);
/* X年某月末日到X年X月某日有多少天 */
int GetDistBetweenTwoDays(int year, int mon, int day, int year2, int mon2, int day2);
/*-----------------------------------------------------------------*\
函数实现
\*-----------------------------------------------------------------*/
void GetSomeDay(int year, int mon, int day)
{
time_t t;//存储需要计算时间距1900的秒数
struct tm test ;//填充这个结构
struct tm *now = NULL;
memset(&test, 0, sizeof(tm));//先清空下
test.tm_year = year - 1900;
test.tm_mon = mon -1;
test.tm_mday = day ;
t = mktime(&test);// 转换成秒
now = localtime(&t);//再转回tm
printf("%d\n", now->tm_yday);//第几天
printf("%s\n", Week[now->tm_wday]);//星期几
}
void GetNextTime(int year, int mon, int day,int num)
{
struct tm *pNext= NULL;
struct tm now, tmp;
time_t t;
memset(&now, 0 , sizeof(struct tm));
memset(&tmp, 0 , sizeof(struct tm));
now.tm_year = year-1900; //指定年
now.tm_mon = mon -1;//指定月份
now.tm_mday = day + num; //指定是哪一天
t = mktime(&now);//转换成秒
pNext = localtime(&t);
printf("%s\n", asctime(pNext));//哪一天
printf("%s\n", Week[pNext->tm_wday]);//星期几
}
void GetWeekDay(int year,int num)
{
time_t t;//存储需要计算时间距1900的秒数
struct tm test ;//填充这个结构
struct tm *now = NULL;
memset(&test, 0, sizeof(tm));//先清空下
test.tm_year = year - 1900;
test.tm_mday = num +1;
t = mktime(&test);// 转换成秒
now = localtime(&t);//再转回tm
printf("%d\n", now->tm_yday);//第几天
printf("%s\n", Week[now->tm_wday]);//星期几
}
int GetDistBetweenTwoDays(int year, int mon, int day, int year2, int mon2, int day2)
{
int distance = 0;
struct tm now, tmp;
time_t t1,t2;
long diff = 0;
memset(&now, 0 , sizeof(struct tm));
memset(&tmp, 0 , sizeof(struct tm));
now.tm_year = year-1900; //指定年
now.tm_mon = mon -1;//指定月份
now.tm_mday = day; //指定是哪一天
tmp.tm_year = year2-1900;
tmp.tm_mon = mon2 -1;
tmp.tm_mday = day2;
t1 = mktime(&now);// 转换成秒
t2 = mktime(&tmp);
diff = (long)fabs(difftime(t1, t2)); /* 算绝对值(秒) */
distance = diff / 3600 / 24; /* 转成天 */
printf("相隔 %d 天\n", distance);
return distance;
}
/*-----------------------------------------------------------------*\
函数测试
\*-----------------------------------------------------------------*/
int main()
{
GetWeekDay(2007,337);
GetSomeDay(2007,12,4);
GetNextTime(2005,12,4,100);
GetDistBetweenTwoDays(2011, 4, 30, 2011, 5, 2);
return 0;
}
/*-----------------------------------------------------------------*\
author: wanfustudio
mail : wanfu.liu@163.com
如何疑问,以及想法,不满足你的需求
欢迎来函!!!
\*-----------------------------------------------------------------*/
author: wanfustudio
mail : wanfu.liu@163.com
Rights: 任意拷贝,修改,传播包括商业使用
Q & A :
如何疑问,以及想法,不满足的需求
欢迎来函!!!
\*-----------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>
/*这段是注释,放在此处用以说明各个成员的含义,在time.h中定义*/
#if 0
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};
#endif
/*-----------------------------------------------------------------*\
全局变量
\*-----------------------------------------------------------------*/
/* 数组与下面tm结构中定义的tm_wday取值范围相对应 */
const char *Week[]=
{
"星期天",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
};
/*-----------------------------------------------------------------*\
函数声明
\*-----------------------------------------------------------------*/
/* 一年中第X天是星期几 */
void GetWeekDay(int year,int num);
/* X年X月X日是一年中的第X天,星期几 */
void GetSomeDay(int year, int mon, int day);
/* X年X月X日再过X天是一年中的第X天,星期几 */
void GetNextTime(int year, int mon, int day,int num);
/* X年某月末日到X年X月某日有多少天 */
int GetDistBetweenTwoDays(int year, int mon, int day, int year2, int mon2, int day2);
/*-----------------------------------------------------------------*\
函数实现
\*-----------------------------------------------------------------*/
void GetSomeDay(int year, int mon, int day)
{
time_t t;//存储需要计算时间距1900的秒数
struct tm test ;//填充这个结构
struct tm *now = NULL;
memset(&test, 0, sizeof(tm));//先清空下
test.tm_year = year - 1900;
test.tm_mon = mon -1;
test.tm_mday = day ;
t = mktime(&test);// 转换成秒
now = localtime(&t);//再转回tm
printf("%d\n", now->tm_yday);//第几天
printf("%s\n", Week[now->tm_wday]);//星期几
}
void GetNextTime(int year, int mon, int day,int num)
{
struct tm *pNext= NULL;
struct tm now, tmp;
time_t t;
memset(&now, 0 , sizeof(struct tm));
memset(&tmp, 0 , sizeof(struct tm));
now.tm_year = year-1900; //指定年
now.tm_mon = mon -1;//指定月份
now.tm_mday = day + num; //指定是哪一天
t = mktime(&now);//转换成秒
pNext = localtime(&t);
printf("%s\n", asctime(pNext));//哪一天
printf("%s\n", Week[pNext->tm_wday]);//星期几
}
void GetWeekDay(int year,int num)
{
time_t t;//存储需要计算时间距1900的秒数
struct tm test ;//填充这个结构
struct tm *now = NULL;
memset(&test, 0, sizeof(tm));//先清空下
test.tm_year = year - 1900;
test.tm_mday = num +1;
t = mktime(&test);// 转换成秒
now = localtime(&t);//再转回tm
printf("%d\n", now->tm_yday);//第几天
printf("%s\n", Week[now->tm_wday]);//星期几
}
int GetDistBetweenTwoDays(int year, int mon, int day, int year2, int mon2, int day2)
{
int distance = 0;
struct tm now, tmp;
time_t t1,t2;
long diff = 0;
memset(&now, 0 , sizeof(struct tm));
memset(&tmp, 0 , sizeof(struct tm));
now.tm_year = year-1900; //指定年
now.tm_mon = mon -1;//指定月份
now.tm_mday = day; //指定是哪一天
tmp.tm_year = year2-1900;
tmp.tm_mon = mon2 -1;
tmp.tm_mday = day2;
t1 = mktime(&now);// 转换成秒
t2 = mktime(&tmp);
diff = (long)fabs(difftime(t1, t2)); /* 算绝对值(秒) */
distance = diff / 3600 / 24; /* 转成天 */
printf("相隔 %d 天\n", distance);
return distance;
}
/*-----------------------------------------------------------------*\
函数测试
\*-----------------------------------------------------------------*/
int main()
{
GetWeekDay(2007,337);
GetSomeDay(2007,12,4);
GetNextTime(2005,12,4,100);
GetDistBetweenTwoDays(2011, 4, 30, 2011, 5, 2);
return 0;
}
/*-----------------------------------------------------------------*\
author: wanfustudio
mail : wanfu.liu@163.com
如何疑问,以及想法,不满足你的需求
欢迎来函!!!
\*-----------------------------------------------------------------*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询