Date::Calc::check_date is C,
boolean DateCalc_check_date(Z_int year, Z_int month, Z_int day)
{
if ((year >= 1) and
(month >= 1) and (month <= 12) and
(day >= 1) and
(day <= DateCalc_Days_in_Month_[DateCalc_leap_year(year)][mont
+h]))
return(true);
return(false);
}
and it basicly uses:
boolean DateCalc_leap_year(Z_int year)
{
Z_int yy;
return( ((year AND 0x03) == 0) and
( (((yy = (Z_int) (year / 100)) * 100) != year) or
((yy AND 0x03) == 0) ) );
}
const Z_int DateCalc_Days_in_Year_[2][14] =
{
{ 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
{ 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
};
const Z_int DateCalc_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 }
};
how to use (rewrite) it in perl |