求两个日期的日期间隔,用SDK。 我第一次写VC程序的时候,不知道有CTime这个类,硬生生的把自己需要的有关日期的函数有C写了一遍。见笑见笑!!计算繁一点,自己多检查几次,不难的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我们的程序不能用MFC啊,大侠 哦?用C重写CTime类吗?只有这个办法吗? 重写几个函数就可以了,你干吗要想到SDK? 也不是非用SDK不可,只要不用MFC就行,是要修补以前人家写的程序,:(。没办法 我以前写过一个,不过一次病毒发作,最后我把盘给格了,全部OVER,很凄凉。这之后我便更注重备份文件了。 我以前写过一个,不过一次病毒发作,最后我把盘给格了,全部OVER,很凄凉。这之后我便更注重备份文件了。现在要考试,很忙,要不我会再写一个。大家都苦。 这不是自找麻烦吗,如果硬是这么做,也可。建立CLASS CYear 先分清是否是闰年,在分别定义月时间,就搞定了。 好象在winbase.h中有个SYSTEMTIME结构,其中包含了年、月、日等信息,不知道行不行?用GetSystemTime(LPSYSTEMTIME time)可以得到当前的系统时间,然后调用该结构中的成员变量进行运算。可以试验一下。 大约这样可以吧?#define isleap(x) ( ((((x)%4)==0)&&(((x)%100)!=0)) || (((x)%400)==0) )unsigned char ucNoLeapDay[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };unsigned char ucLeapDay[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };main(){ int mon1,mon2,year1,year2,day1,day2; int year,mon,day; if(day1 < day2) { mon1--; if(isleep(year1) ) { day1 += ucLeapDay[mon1-1]; } else { day1 += ucNoLeapDay[mon1-1]; } } if(mon1 < mon2) { mon1 += 12; year1 --; } year = year1 - year2; mon = mon1 - mon2; day = day1 - day2; } /* 下午写了半小时,终于搞定了。C版本代码如下: 在tc 2.0下通过。当然,用C++写更好*/struct tagTime{ int year; int month; int day; };void Set(int y,int m,int d,struct tagTime *t)/*设置日期*/{ t->year=y; t->month=m; t->day=d;}int IsLeapYear(int year) /*是否闰年*/{ return((year%4==0)&&(year%100!=0)||year%400==0);}int GetLastDay(struct tagTime date) /*得到date.month的最大天数*/{ int num; switch(date.month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: num=31; break; case 2: num= 28+IsLeapYear(date.year); break; default: num= 30; } return num;}int IsDateValid(struct tagTime date) /*日期是否合法*/{ if(date.year<0||date.month<1||date.month>12) return 0; if(date.day<1||date.day>GetLastDay(date))return 0; return 1;}void AddDay(struct tagTime *date) /*date+1*/{ date->day++; if(date->day>GetLastDay(*date)) { date->day=1;date->month++; if(date->month>12){ date->month=1; date->year++; } }}int Compare(struct tagTime t1,struct tagTime t2) /*t1比t2小返回值为1,否则为0*/{ if(t1.year<t2.year)return 1; if(t1.year<=t2.year&&t1.month<t2.month) return 1; if(t1.year<=t2.year&&t1.month<=t2.month&&t1.day<t2.day) return 1; return 0;}long CountDate(struct tagTime t1,struct tagTime t2){ long delta=0;struct tagTime t3; if(!Compare(t1,t2))/*若t1>t2,交换t1,t2*/ { t3=t2;t2=t1;t1=t3; } while(Compare(t1,t2))/*本方法是笨方法,但很直观,t1比t2少时,t1日期加1*/ { AddDay(&t1); delta++; } return delta;}void main(){ struct tagTime t1,t2,t3; int y,m,d;clrscr(); while(1) { puts("\nInput t1\t"); scanf("%d,%d,%d",&y,&m,&d); Set(y,m,d,&t1); if(!IsDateValid(t1)) { puts("T1 is invalid"); exit(1); } puts("\nInput t2\t"); scanf("%d,%d,%d",&y,&m,&d); Set(y,m,d,&t2); if(!IsDateValid(t2)) { puts("T2 is invalid"); exit(1); } printf("\n[%ld]",CountDate(t1,t2)); }}/*至于求隔了多少年,月你就自己解决了*/ VS11 的驱动模版必须是装在win8上才有吗? MFC与数据库 【求助】VC如何调用动态链接库,谢谢了 用EOF 还是用adoEOF? 用directsound播放wav问题! 在VC下用MFC编程 有没有什么现成的函数可以求的两个矩形的相交矩形呢 结合一个开源项目学插件开发: 关于Mailbox名称的编码 关于BMP文件的的小问题? MFC中TeeChart各个版本兼容的问题 一个即将毕业的程序员的短短两年的编程人生,又要开始学VC了,郁闷中 一个菜鸟问题!!!!
这之后我便更注重备份文件了。
这之后我便更注重备份文件了。
现在要考试,很忙,要不我会再写一个。大家都苦。
先分清是否是闰年,在分别定义月时间,就搞定了。
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };unsigned char ucLeapDay[12] =
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };main()
{
int mon1,mon2,year1,year2,day1,day2;
int year,mon,day;
if(day1 < day2)
{
mon1--;
if(isleep(year1) )
{
day1 += ucLeapDay[mon1-1];
}
else
{
day1 += ucNoLeapDay[mon1-1];
}
}
if(mon1 < mon2)
{
mon1 += 12;
year1 --;
} year = year1 - year2;
mon = mon1 - mon2;
day = day1 - day2;
}
下午写了半小时,终于搞定了。C版本代码如下:
在tc 2.0下通过。当然,用C++写更好
*/struct tagTime{
int year;
int month;
int day;
};void Set(int y,int m,int d,struct tagTime *t)/*设置日期*/
{
t->year=y;
t->month=m;
t->day=d;
}int IsLeapYear(int year) /*是否闰年*/
{
return((year%4==0)&&(year%100!=0)||year%400==0);
}int GetLastDay(struct tagTime date) /*得到date.month的最大天数*/
{
int num;
switch(date.month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
num=31;
break;
case 2:
num= 28+IsLeapYear(date.year);
break;
default:
num= 30;
}
return num;
}int IsDateValid(struct tagTime date) /*日期是否合法*/
{
if(date.year<0||date.month<1||date.month>12)
return 0;
if(date.day<1||date.day>GetLastDay(date))return 0;
return 1;
}void AddDay(struct tagTime *date) /*date+1*/
{
date->day++;
if(date->day>GetLastDay(*date))
{
date->day=1;date->month++;
if(date->month>12){
date->month=1;
date->year++;
}
}
}int Compare(struct tagTime t1,struct tagTime t2) /*t1比t2小返回值为1,否则为0*/
{
if(t1.year<t2.year)return 1;
if(t1.year<=t2.year&&t1.month<t2.month) return 1;
if(t1.year<=t2.year&&t1.month<=t2.month&&t1.day<t2.day) return 1;
return 0;
}long CountDate(struct tagTime t1,struct tagTime t2)
{
long delta=0;struct tagTime t3;
if(!Compare(t1,t2))/*若t1>t2,交换t1,t2*/
{
t3=t2;t2=t1;t1=t3;
}
while(Compare(t1,t2))/*本方法是笨方法,但很直观,t1比t2少时,t1日期加1*/
{
AddDay(&t1);
delta++;
}
return delta;
}void main()
{
struct tagTime t1,t2,t3;
int y,m,d;clrscr();
while(1)
{
puts("\nInput t1\t");
scanf("%d,%d,%d",&y,&m,&d);
Set(y,m,d,&t1);
if(!IsDateValid(t1))
{
puts("T1 is invalid");
exit(1);
}
puts("\nInput t2\t");
scanf("%d,%d,%d",&y,&m,&d);
Set(y,m,d,&t2);
if(!IsDateValid(t2))
{
puts("T2 is invalid");
exit(1);
}
printf("\n[%ld]",CountDate(t1,t2));
}
}/*至于求隔了多少年,月你就自己解决了*/