bool KCalendarSystemHebrew::setYMD(TQDate & date, int y, int m, int d) const { if( y < minValidYear() || y > maxValidYear() ) return false; if( m < 1 || m > (is_leap_year(y) ? 13 : 12) ) return false; if( d < 1 || d > hndays(m,y) ) return false; class h_date * gd = hebrewToGregorian( y, m, d ); return date.setYMD(gd->hd_year, gd->hd_mon + 1, gd->hd_day + 1); }
// Ok int KCalendarSystemHebrew::weeksInYear(int year) const { TQDate temp; setYMD(temp, year, 1, 1); // don't pass an uninitialized TQDate to // monthsInYear in the next call setYMD(temp, year, monthsInYear(temp), hndays(monthsInYear(temp), year) ); int nWeekNumber = weekNumber(temp); if(nWeekNumber == 1) // last week belongs to next year { temp = TQT_TQDATE_OBJECT(temp.addDays(-7)); nWeekNumber = weekNumber(temp); } return nWeekNumber; }
bool KCalendarSystemJalali::isValid( int y, int month, int day ) const { // taken from setYMD below, adapted to use new methods if ( y < year( earliestValidDate() ) || y > year( latestValidDate() ) ) { return false; } if ( month < 1 || month > 12 ) { // Fix me! return false; } if ( day < 1 || day > hndays( month, y ) ) { return false; } return true; }
//MAY BE BUGGY bool KCalendarSystemJalali::setYMD( QDate &date, int y, int m, int d ) const { // range checks // Removed deleted minValidYear and maxValidYear methods // Still use minimum of 1753 gregorain for now due to QDate using Julian calendar before then // Later change to following once new methods validated // if ( y < year( earliestValidDate() ) || y > year( latestValidDate() ) ) if ( y < year( QDate( 1753, 1, 1 ) ) || y > 9999 ) { return false; } if ( m < 1 || m > 12 ) { return false; } if ( d < 1 || d > hndays( m, y ) ) { return false; } SDATE *gd = jalaliToGregorian( y, m, d ); return date.setDate( gd->year, gd->mon, gd->day ); }
int KCalendarSystemHebrew::daysInMonth(const TQDate& date) const { return hndays(month(date), year(date)); }