static long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day) { long scalar; scalar = day + months_to_days(mo); if (mo > 2) /* adjust if past February */ scalar -= isleap(yr) ? 1 : 2; yr--; scalar += years_to_days(yr); return scalar; }
int jdate( unsigned yr, unsigned mo, unsigned day ) { SEH_PUSH("jdate()"); int which = day + months_to_days( mo ); if ( mo > 2 ) { which -= isleap( yr ) ? 1 : 2; } return which; }
/*--------------------------------------------------------------------------*/ static long ymd_to_scalar (unsigned year, unsigned month, unsigned day) { long scalaire; scalaire = day + months_to_days(month); if ( month > 2 ) { scalaire -= isBissextile(year) ? 1 : 2; } year--; scalaire += years_to_days(year); return scalaire; }
void scalar_to_ymd (long scalar, unsigned *yr, unsigned *mo, unsigned *day) { static unsigned n; /* compute inverse of years_to_days() */ for ( n = (unsigned)((scalar * 400L) / 146097L); years_to_days(n) < scalar;) n++; /* 146097 == years_to_days(400) */ *yr = n; n = (unsigned)(scalar - years_to_days(n-1)); if ( n > 59 ) { /* adjust if past February */ n += 2; if ( isleap(*yr) ) n -= n > 62 ? 1 : 2; } *mo = (n * 100 + 3007) / 3057; /* inverse of months_to_days() */ *day = n - months_to_days(*mo); }
static void scalar_to_ymd (long scalar, unsigned *pyr, unsigned *pmo, unsigned *pday) { unsigned n; // compute inverse of years_to_days() n = (unsigned)((scalar * 400L) / 146097L); while ((long)years_to_days(n) < scalar) { n++; } for ( n = (unsigned)((scalar * 400L) / 146097L); (long)years_to_days(n) < scalar; ) n++; // 146097 == years_to_days(400) *pyr = n; n = (unsigned)(scalar - years_to_days(n-1)); if ( n > 59 ) { // adjust if past February n += 2; if ( isleap(*pyr) ) n -= n > 61 ? 1 : 2; } *pmo = (n * 100 + 3007) / 3057; // inverse of months_to_days() *pday = n - months_to_days(*pmo); return; }