예제 #1
0
파일: dt_util.c 프로젝트: ifzz/c-dt
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;
}
예제 #2
0
파일: dt_util.c 프로젝트: ifzz/c-dt
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];
}
예제 #3
0
파일: dt_util.c 프로젝트: ifzz/c-dt
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];
}
예제 #4
0
파일: vdt-1.0.c 프로젝트: vSlipenchuk/vdb
// фэхщ ё 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;
}
예제 #5
0
파일: vdt-1.0.c 프로젝트: vSlipenchuk/vdb
// 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;
  }
}
예제 #6
0
파일: vdt-1.0.c 프로젝트: vSlipenchuk/vdb
int DaysInMonth(int year, int month) {
    if (month<1 || month>12) return 0; // fail?
    return dt_month_day[dt_leap_year(year)][month-1];
}
예제 #7
0
파일: dt_util.c 프로젝트: ifzz/c-dt
int
dt_days_in_year(int y) {
    return dt_leap_year(y) ? 366 : 365;
}