jd_t hebrew_to_jd(year_t year, month_t month, day_t day, hour_t hour, minute_t minute, second_t second) { jd_t ymd = HEBREW_EPOCH + delay_of_week(year) + delay_adjacent_year(year) + day + 1; if (month < 7) { for (month_t m = 7; m <= hebrew_months_in_year(year); ++m) ymd += hebrew_days_in_month(year, m); for (month_t m = 1; m <= month - 1; ++m) ymd += hebrew_days_in_month(year, m); } else { for (month_t m = 7; m <= month - 1; ++m) ymd += hebrew_days_in_month(year, m); } jd_t hms = tod(hour, minute, second); if (hms >= 0.5) --hms; return ymd + hms; }
/* Given an absolute date, calculate the Hebrew date */ void Converter::hebrew_from_absolute( long date, int *yearp, int *monthp, int *dayp ) { int year, month, day, gyear, gmonth, gday, months; gregorian_from_absolute( date, &gyear, &gmonth, &gday ); year = gyear + 3760; while ( date >= absolute_from_hebrew( 1 + year, 7, 1 ) ) { year++; } months = hebrew_months_in_year( year ); for ( month = 7; date > absolute_from_hebrew( year, month, hebrew_month_length( year, month ) ); month = 1 + ( month % months ) ) {} day = 1 + date - absolute_from_hebrew( year, month, 1 ); *yearp = year; *monthp = month; *dayp = day; }
/* Given a Hebrew date, calculate the number of days since January 0, 0001, Gregorian */ long Converter::absolute_from_hebrew( int year, int month, int day ) { long sum = day + hebrew_elapsed_days( year ) - 1373429L; int i; if ( month < 7 ) { int months = hebrew_months_in_year( year ); for ( i = 7; i <= months; ++i ) { sum += hebrew_month_length( year, i ); } for ( i = 1; i < month; ++i ) { sum += hebrew_month_length( year, i ); } } else { for ( i = 7; i < month; ++i ) { sum += hebrew_month_length( year, i ); } } return sum; }