mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r7948) -Backport from trunk (r7731):
- off-by-one error in the date to YMD calculation for first 4 years of a century that was not divisable by 400
This commit is contained in:
parent
2684cb2525
commit
630f81c382
19
date.c
19
date.c
|
@ -92,9 +92,22 @@ void ConvertDateToYMD(Date date, YearMonthDay *ymd)
|
||||||
int rem = date % (365 * 400 + 97);
|
int rem = date % (365 * 400 + 97);
|
||||||
uint16 x;
|
uint16 x;
|
||||||
|
|
||||||
/* There are 24 leap years in 100 years */
|
if (rem >= 365 * 100 + 25) {
|
||||||
yr += 100 * (rem / (365 * 100 + 24));
|
/* There are 25 leap years in the first 100 years after
|
||||||
rem = rem % (365 * 100 + 24);
|
* every 400th year, as every 400th year is a leap year */
|
||||||
|
yr += 100;
|
||||||
|
rem -= 365 * 100 + 25;
|
||||||
|
|
||||||
|
/* There are 24 leap years in the next couple of 100 years */
|
||||||
|
yr += 100 * (rem / (365 * 100 + 24));
|
||||||
|
rem = (rem % (365 * 100 + 24));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsLeapYear(yr) && rem >= 365 * 4) {
|
||||||
|
/* The first 4 year of the century are not always a leap year */
|
||||||
|
yr += 4;
|
||||||
|
rem -= 365 * 4;
|
||||||
|
}
|
||||||
|
|
||||||
/* There is 1 leap year every 4 years */
|
/* There is 1 leap year every 4 years */
|
||||||
yr += 4 * (rem / (365 * 4 + 1));
|
yr += 4 * (rem / (365 * 4 + 1));
|
||||||
|
|
Loading…
Reference in New Issue