我第一次写VC程序的时候,不知道有CTime这个类,硬生生的把自己需要的有关日期的函数有C写了一遍。见笑见笑!!
计算繁一点,自己多检查几次,不难的。

解决方案 »

  1.   

    我们的程序不能用MFC啊,大侠
      

  2.   

    哦?用C重写CTime类吗?只有这个办法吗?
      

  3.   

    重写几个函数就可以了,你干吗要想到SDK?
      

  4.   

    也不是非用SDK不可,只要不用MFC就行,是要修补以前人家写的程序,:(。没办法
      

  5.   

    我以前写过一个,不过一次病毒发作,最后我把盘给格了,全部OVER,很凄凉。
    这之后我便更注重备份文件了。
      

  6.   

    我以前写过一个,不过一次病毒发作,最后我把盘给格了,全部OVER,很凄凉。
    这之后我便更注重备份文件了。
    现在要考试,很忙,要不我会再写一个。大家都苦。
      

  7.   

    这不是自找麻烦吗,如果硬是这么做,也可。建立CLASS CYear 
    先分清是否是闰年,在分别定义月时间,就搞定了。
      

  8.   

       好象在winbase.h中有个SYSTEMTIME结构,其中包含了年、月、日等信息,不知道行不行?用GetSystemTime(LPSYSTEMTIME time)可以得到当前的系统时间,然后调用该结构中的成员变量进行运算。可以试验一下。
      

  9.   

    大约这样可以吧?#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;

    }
      

  10.   

    /*
    下午写了半小时,终于搞定了。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));
       }
    }/*至于求隔了多少年,月你就自己解决了*/