131bool QJalaliCalendar::dateToJulianDay(
int year,
int month,
int day, qint64 *jd)
const
134 if (!isDateValid(year, month, day))
137 const int yearOffset = year < 0 ? 474 : 475;
138 auto yModCycle = qDivMod<cycleYears>(year);
139 if (yModCycle.remainder < yearOffset) {
140 yModCycle.quotient -= 1;
141 yModCycle.remainder += cycleYears;
143 yModCycle.remainder -= yearOffset;
146 for (
int i = 1; i < month; ++i)
147 dayInYear += daysInMonth(i, year);
148 *jd = firstDayOfYear(yModCycle.remainder, yModCycle.quotient) + dayInYear - 1;
152QCalendar::YearMonthDay QJalaliCalendar::julianDayToDate(qint64 jd)
const
154 using Bound = std::numeric_limits<
int>;
155 constexpr qint64 maxInt = Bound::max();
156 const int c = cycle(jd);
157 int yearInCycle = qFloor((jd - cycleStart(c)) / yearLength);
158 int day = jd - firstDayOfYear(yearInCycle, c) + 1;
161 qint64 y = yearInCycle + 475 + c * qint64(cycleYears);
163 if (day > (isLeap(y) ? 366 : 365)) {
168 if (y > maxInt || y < -maxInt)
171 int year =
static_cast<
int>(y);
175 for (month = 1; month < 12; ++month) {
176 const int last = daysInMonth(month, year);
181 return {year, month, day};