![]() |
ATC
Advanced Trip Computer
|
00001 00009 class Date { 00010 00011 private: 00012 00013 unsigned int day; // giorno 00014 unsigned int month; // mese 00015 unsigned int year; // anno 00016 00023 int julianNumber(Date d) 00024 { 00025 int c, y, m; 00026 00027 c = (14-d.getMonth())/12; 00028 y = d.getYear()+4800-c; 00029 m = d.getMonth()+12*c-3; 00030 00031 return d.getDay()+(153*m+2)/5+365*y+y/4-y/100+y/400-32045; 00032 } 00033 00034 public: 00035 00043 Date(unsigned int d=1, unsigned int m=1, unsigned int y=2000) 00044 { 00045 day = 1; 00046 month = 1; 00047 year = 2000; 00048 if (y<1 || m<1 || m>12 || d<1) 00049 return; 00050 if (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) 00051 if (d>31) 00052 return; 00053 if (m==4 || m==6 || m==9 || m==11) 00054 if (d>30) 00055 return; 00056 if (m==2 && y%4==0) // bisestile 00057 if (d>29) return; 00058 if (m==2 && y%4!=0) // non bisestile 00059 if (d>28) return; 00060 year = y; 00061 month = m; 00062 day = d; 00063 } 00067 unsigned int getDay(void) 00068 { 00069 return day; 00070 } 00074 unsigned int getMonth(void) 00075 { 00076 return month; 00077 } 00081 unsigned int getYear(void) 00082 { 00083 return year; 00084 } 00090 int dayDifference(Date d) 00091 { 00092 int my_jn, jn; 00093 00094 my_jn = julianNumber(*this); 00095 jn = julianNumber(d); 00096 00097 return (jn - my_jn); 00098 } 00099 };