int get_day_hash (int,int,int);
int get_day_of_year (int,int,int);
int get_day_by_year (int);
enum MONTH_DAYS
{
JAN = 31,
FEB = JAN + 28,
MAR = FEB + 31,
APR = MAR + 30,
MAY = APR + 31,
JUN = MAY + 30,
JUL = JUN + 31,
AUG = JUL + 31,
SEP = AUG + 30,
OCT = SEP + 31,
NOV = OCT + 30,
DEC = NOV + 31
};
static const int day_on_month [] =
{
JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};
// january == 1, days start at 1
int get_day_hash ( int dd, int mm, int yyyy )
{
return get_day_by_year (yyyy) + get_day_of_year(dd,mm,yyyy);
}
int get_day_by_year ( int yyyy )
{
int num_leap_years;
// get number of leap years
num_leap_years = 0;
num_leap_years += (yyyy / 4);
num_leap_years -= (yyyy / 100);
num_leap_years += (yyyy / 400);
// ... and like magic
return (yyyy * 365) + num_leap_years;
}
// january == 1, days start at 1
int get_day_of_year ( int dd, int mm, int yyyy )
{
BOOL is_leap_year;
int day_of_year;
if ( (0 == (yyyy % 4)) && !(0 == (yyyy % 100)) )
{
is_leap_year = TRUE;
}
else if ( 0 == (yyyy % 400) )
{
is_leap_year = TRUE;
}
else
{
is_leap_year = FALSE;
}
day_of_year = day_on_month [mm-1] + (dd+1);
if ( is_leap_year && (mm >= 2 ) )
{
++ day_of_year;
}
return day_of_year;
} |