summaryrefslogtreecommitdiff
path: root/i18npool/source
diff options
context:
space:
mode:
authorHossein <hossein@libreoffice.org>2022-02-25 00:22:11 +0100
committerEike Rathke <erack@redhat.com>2022-02-25 19:12:41 +0100
commit0308e48e46cee2f56a6239c8479d26185146d74a (patch)
treedbbbfd146029268e9bb2f6129a85d905a9d41e1e /i18npool/source
parent9cd4da63b6ed19b71a2475fccb4ab135f0a87873 (diff)
tdf#145759 30.6001 -> monthDaysWithoutJanFeb
30.6001 shows month days without Jan and Feb. According to the below link, it is calcuated as (365-31-28)/10 = 30.6 but because of a floating point bug, it was used as 30.6001 as a workaround. "30.6001, 25 year old hack?" https://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/archv011.cgi?read=31650 The value 30.6 is used as i18nutil::monthDaysWithoutJanFeb here instead of 30.6001. The new value is ~30.60000038 which is > 30.6, so the calculations should be correct. In order to make sure, a unit test is added, and part of the values are checked against the values calculated by this website: Julian Day and Civil Date Calculator https://core2.gsfc.nasa.gov/time/julian.html Change-Id: I8cc7e046514dc3de652a1c37399e351cb2b614dc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125813 Tested-by: Jenkins Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'i18npool/source')
-rw-r--r--i18npool/source/calendar/calendar_hijri.cxx8
1 files changed, 4 insertions, 4 deletions
diff --git a/i18npool/source/calendar/calendar_hijri.cxx b/i18npool/source/calendar/calendar_hijri.cxx
index 3d24150f8bf8..ed64c80db68c 100644
--- a/i18npool/source/calendar/calendar_hijri.cxx
+++ b/i18npool/source/calendar/calendar_hijri.cxx
@@ -18,7 +18,7 @@
*/
#include <sal/config.h>
-
+#include <i18nutil/calendar.hxx>
#include <cmath>
#include <stdlib.h>
@@ -257,10 +257,10 @@ Calendar_hijri::getGregorianDay(sal_Int32 lJulianDay, sal_Int32 *pnDay, sal_Int3
lFactorB = lFactorA + 1524;
lFactorC = static_cast<tools::Long>(6680.0 + (static_cast<float>(lFactorB - 2439870) - 122.1) / 365.25);
lFactorD = static_cast<tools::Long>(365 * lFactorC + (0.25 * lFactorC));
- lFactorE = static_cast<tools::Long>((lFactorB - lFactorD) / 30.6001);
+ lFactorE = static_cast<tools::Long>((lFactorB - lFactorD) / i18nutil::monthDaysWithoutJanFeb);
/* now, pull out the day number */
- *pnDay = lFactorB - lFactorD - static_cast<tools::Long>(30.6001 * lFactorE);
+ *pnDay = lFactorB - lFactorD - static_cast<tools::Long>(i18nutil::monthDaysWithoutJanFeb * lFactorE);
/* ...and the month, adjusting it if necessary */
*pnMonth = lFactorE - 1;
@@ -298,7 +298,7 @@ Calendar_hijri::getJulianDay(sal_Int32 day, sal_Int32 month, sal_Int32 year)
jm = month + 13;
}
- sal_Int32 intgr = static_cast<sal_Int32>(static_cast<sal_Int32>(365.25 * jy) + static_cast<sal_Int32>(30.6001 * jm) + day + 1720995 );
+ sal_Int32 intgr = static_cast<sal_Int32>(static_cast<sal_Int32>(365.25 * jy) + static_cast<sal_Int32>(i18nutil::monthDaysWithoutJanFeb * jm) + day + 1720995 );
//check for switch to Gregorian calendar
double const gregcal = 15 + 31 * ( 10 + 12 * 1582 );