cal: fix julian calendars for large years
Before: cal --r julian 31 12 2147483646 December 2147483646 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Patched: cal --r julian 31 12 2147483646 December 2147483646 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Signed-off-by: J William Piggott <elseifthen@gmx.com>
This commit is contained in:
parent
af1bc027db
commit
1dca3edc36
|
@ -924,14 +924,15 @@ static int day_in_week(const struct cal_control *ctl, int day,
|
|||
|| (year == ctl->reform_year && REFORMATION_MONTH < month)
|
||||
|| (year == ctl->reform_year
|
||||
&& month == REFORMATION_MONTH && 13 < day)) {
|
||||
int64_t long_year = year;
|
||||
return (long_year + (year / 4) - (year / 100) + (year / 400) +
|
||||
reform[month - 1] + day) % DAYS_IN_WEEK;
|
||||
return ((int64_t) year + (year / 4)
|
||||
- (year / 100) + (year / 400)
|
||||
+ reform[month - 1] + day) % DAYS_IN_WEEK;
|
||||
}
|
||||
if (year < ctl->reform_year
|
||||
|| (year == ctl->reform_year && month < REFORMATION_MONTH)
|
||||
|| (year == ctl->reform_year && month == REFORMATION_MONTH && day < 3))
|
||||
return (year + year / 4 + old[month - 1] + day) % DAYS_IN_WEEK;
|
||||
return ((int64_t) year + year / 4 + old[month - 1] + day)
|
||||
% DAYS_IN_WEEK;
|
||||
return NONEDAY;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue