home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c100 / 5.ddi / DATECL.ZIP / DATE.CPP next >
Encoding:
C/C++ Source or Header  |  1989-11-28  |  2.0 KB  |  108 lines

  1. #include <stdio.h>
  2. #include <dos.h>
  3. #include "date.hpp"
  4.  
  5. int endmonth[13] = {0,31,59,90,120,151,181,212,243,273,304,334,365};
  6.  
  7. Date::Date(void) { ; };
  8.  
  9. Date::Date(int Mon,int Day,int Year)
  10. {
  11.     da_mon = Mon ;
  12.     da_day = Day ;
  13.     da_year = Year ;
  14. }
  15.   
  16. Date::Date(Date& adate)
  17. {
  18.     da_mon  = adate.da_mon ;
  19.     da_day  = adate.da_day ;
  20.     da_year = adate.da_year;
  21. }
  22.  
  23. /* numberdays - calculates the number of days since 1/1/0000 */
  24. long Date::numberdays(void)
  25. {
  26.     long tmp;
  27.  
  28.     /* calcute Days for current year */
  29.     tmp = (long) ((double)da_year*(double)365.25);
  30.     tmp += (long) endmonth[da_mon-1] + ((this->isleap() && da_mon>3) ? 1L : 0L);
  31.     tmp += (long) da_day;
  32.     return(tmp) ;
  33.     
  34. void Date::readdate(void) {
  35.     int Mon,Day,Year ;
  36.  
  37.     scanf("%d %d %d",&Mon,&Day,&Year) ;
  38.     da_mon=Mon ;
  39.     da_day=Day ;
  40.     da_year=Year ;
  41. }
  42.   
  43. void Date::printdate(void) {
  44.     printf("%02d/%02d/%04d",(int)da_mon,(int)da_day,da_year) ;
  45.  
  46. void Date::daytodate(long days)
  47. {
  48.     long tmp;
  49.  
  50.     /* calcute Days for current year */
  51.     da_year = (int) ((double)days / (double)365.25);
  52.     tmp = (long) ((double)da_year*(double)365.25);
  53.     days -= tmp;
  54.  
  55.     /* calculate days for current month */
  56.     for(da_mon=1;da_mon<13;da_mon++) {
  57.         if (this->isleap() && da_mon>2) {
  58.             if (days <= (long)endmonth[da_mon]+1L) 
  59.             {
  60.                 da_day = days - (long)endmonth[da_mon-1] - ((da_mon>3) ? 1L : 0L);
  61.                 break;
  62.             }
  63.         } else 
  64.                if (days <= (long)endmonth[da_mon]) 
  65.              {
  66.                  da_day = days - (long)endmonth[da_mon-1];
  67.                  break;
  68.              };
  69.       } ;
  70. }
  71.  
  72. Date Date::addday(long days)
  73. {
  74.     long start;
  75.     Date tmp;
  76.  
  77.     start = this->numberdays();
  78.     start += days;
  79.     this->daytodate(start);
  80.     return(tmp);
  81. }
  82.  
  83.  
  84. Date Date::operator+(Date& Date1)
  85. {
  86.     Date tmp;
  87.     long start,days;
  88.  
  89.     days = Date1.numberdays();
  90.     start = this->numberdays();
  91.     start += days;
  92.     tmp.daytodate(start);
  93.     return(tmp);
  94. }
  95.  
  96. int Date::operator-(Date& adate)
  97. {
  98.     return(this->numberdays()-adate.numberdays()) ;
  99. }
  100.  
  101. int daysbetween( Date& Date1, Date& Date2 ) 
  102. {
  103.     return(Date2.numberdays()-Date1.numberdays()) ;
  104.  
  105.