int dt_weeks_in_year(int year) { unsigned int y, d; if (year < 1) year += 400 * (1 - year/400); y = year - 1; d = (y + y/4 - y/100 + y/400) % 7; /* [0=Mon, 6=Sun]*/ return (d == 3 || (d == 2 && dt_leap_year(year))) ? 53 : 52; }
int dt_days_in_month(int y, int m) { static const int days_in_month[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; if (m < 1 || m > 12) return 0; return days_in_month[dt_leap_year(y)][m]; }
int dt_days_in_quarter(int y, int q) { static const int days_in_quarter[2][5] = { { 0, 90, 91, 92, 92 }, { 0, 91, 91, 92, 92 } }; if (q < 1 || q > 4) return 0; return days_in_quarter[dt_leap_year(y)][q]; }
// фэхщ ё 00.00.0000 date_time date_encode(int Year, int Month, int Day) { int i,*MonDay; MonDay=dt_month_day[dt_leap_year(Year)]; // фэхщ т ьхё Ўрї(уюф юсvўэvщ/тшёюъ.) i= ( Year>=1 && Year<9999 && Month>=1 && Month<=12 && Day>=1 && Day<=MonDay[Month-1] ); // трышфэюёЄ№ тїюфэvї фрээvї if(i) { for(i=0; i<Month-1; i++) Day+=MonDay[i]; // фэхщ ё эрўрыр уюфр i=Year-1; return i*365 + i/4 - i/100 + i/400 + Day - dt_delta; } return 0; }
// Lчтыхў№ Day.Month.Year шч яюыэющ фрЄv/тЁхьхэш Date void date_decode(date_time Date, int *Year, int *Month, int *Day) { int D1 = 365, D4 = D1 * 4 + 1, D100 = D4 * 25 - 1, D400 = D100 * 4 + 1, Y, M, D, I, T, *DayTable; T=(int)Date; if(T<=0){ *Year=0; *Month=0; *Day=0; } else { for(T--,Y=1; T>=D400; T-=D400,Y+=400); // ъєёъш яю 400 ыхЄ DivMod(T,D100,&I,&D); if(I==4){I--;D+=D100;}; Y+=I*100; // яю 100 ыхЄ DivMod(D, D4,&I,&D); Y+=I*4; // яю 4 уюфр DivMod(D, D1,&I,&D); if(I==4){I--;D+=D1;}; Y+=I; // яю уюфє DayTable = dt_month_day[dt_leap_year(Y)]; // фэхщ т ьхё Ўрї for(M = 1; 1; D-=I,M++){ I=DayTable[M-1]; if(D<I) break; } *Year=Y; *Month=M; *Day= D + 1; } }
int DaysInMonth(int year, int month) { if (month<1 || month>12) return 0; // fail? return dt_month_day[dt_leap_year(year)][month-1]; }
int dt_days_in_year(int y) { return dt_leap_year(y) ? 366 : 365; }