bool HDate::is_leap_year(int year){ int length_of_year; int days_from_3744; days_from_3744 = hdate_days_from_3744 (year); length_of_year = hdate_days_from_3744 (year + 1) - days_from_3744; if (length_of_year>365){ return true; } return false; }
/** @brief Converting from the Julian day to the Hebrew day @author Amos Shapir 1984 (rev. 1985, 1992) Yaacov Zamir 2003-2008 @param jd Julian day @param day Return Day of month 1..31 @param month Return Month 1..14 (13 - Adar 1, 14 - Adar 2) @param year Return Year in 4 digits e.g. 2001 */ void hdate_jd_to_hdate (int jd, int *day, int *month, int *year, int *jd_tishrey1, int *jd_tishrey1_next_year) { int days; int size_of_year; int internal_jd_tishrey1, internal_jd_tishrey1_next_year; /* calculate Gregorian date */ hdate_jd_to_gdate (jd, day, month, year); /* Guess Hebrew year is Gregorian year + 3760 */ *year = *year + 3760; internal_jd_tishrey1 = hdate_days_from_3744 (*year) + 1715119; internal_jd_tishrey1_next_year = hdate_days_from_3744 (*year + 1) + 1715119; /* Check if computed year was underestimated */ if (internal_jd_tishrey1_next_year <= jd) { *year = *year + 1; internal_jd_tishrey1 = internal_jd_tishrey1_next_year; internal_jd_tishrey1_next_year = hdate_days_from_3744 (*year + 1) + 1715119; } size_of_year = internal_jd_tishrey1_next_year - internal_jd_tishrey1; /* days into this year, first month 0..29 */ days = jd - internal_jd_tishrey1; /* last 8 months allways have 236 days */ if (days >= (size_of_year - 236)) /* in last 8 months */ { days = days - (size_of_year - 236); *month = days * 2 / 59; *day = days - (*month * 59 + 1) / 2 + 1; *month = *month + 4 + 1; /* if leap */ if (size_of_year > 355 && *month <=6) *month = *month + 8; } else /* in 4-5 first months */ { /* Special cases for this year */ if (size_of_year % 10 > 4 && days == 59) /* long Heshvan (day 30 of Heshvan) */ { *month = 1; *day = 30; } else if (size_of_year % 10 > 4 && days > 59) /* long Heshvan */ { *month = (days - 1) * 2 / 59; *day = days - (*month * 59 + 1) / 2; } else if (size_of_year % 10 < 4 && days > 87) /* short kislev */ { *month = (days + 1) * 2 / 59; *day = days - (*month * 59 + 1) / 2 + 2; } else /* regular months */ { *month = days * 2 / 59; *day = days - (*month * 59 + 1) / 2 + 1; } *month = *month + 1; } /* return the 1 of tishrey julians */ if (jd_tishrey1 && jd_tishrey1_next_year) { *jd_tishrey1 = internal_jd_tishrey1; *jd_tishrey1_next_year = internal_jd_tishrey1_next_year; } return; }