diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-08-31 01:01:42 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-08-31 01:01:53 +0200 |
commit | d795272af5434bdcc794e80e077323a0d1140ab2 (patch) | |
tree | 5888fed53d5b747e122ade9517ce750ffba23eca /src/corelib/time/qgregoriancalendar.cpp | |
parent | a5ba29b79d4793a3c18aaf64f24582d93c0fe4e8 (diff) | |
parent | a2a4c3a5ff50dc68f6931917c8f017f9b4d69b6b (diff) |
Merge "Merge remote-tracking branch 'origin/5.14' into dev"
Diffstat (limited to 'src/corelib/time/qgregoriancalendar.cpp')
-rw-r--r-- | src/corelib/time/qgregoriancalendar.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/corelib/time/qgregoriancalendar.cpp b/src/corelib/time/qgregoriancalendar.cpp index d3db572aa7..447185d124 100644 --- a/src/corelib/time/qgregoriancalendar.cpp +++ b/src/corelib/time/qgregoriancalendar.cpp @@ -78,6 +78,11 @@ QCalendar::System QGregorianCalendar::calendarSystem() const bool QGregorianCalendar::isLeapYear(int year) const { + return leapTest(year); +} + +bool QGregorianCalendar::leapTest(int year) +{ if (year == QCalendar::Unspecified) return false; @@ -88,10 +93,37 @@ bool QGregorianCalendar::isLeapYear(int year) const return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); } +// Duplicating code from QRomanCalendar, but inlining isLeapYear() as leapTest(): +int QGregorianCalendar::monthLength(int month, int year) +{ + if (month < 1 || month > 12) + return 0; + + if (month == 2) + return leapTest(year) ? 29 : 28; + + return 30 | ((month & 1) ^ (month >> 3)); +} + +bool QGregorianCalendar::validParts(int year, int month, int day) +{ + return year && 0 < day && day <= monthLength(month, year); +} + +int QGregorianCalendar::weekDayOfJulian(qint64 jd) +{ + return qMod(jd, 7) + 1; +} + bool QGregorianCalendar::dateToJulianDay(int year, int month, int day, qint64 *jd) const { + return julianFromParts(year, month, day, jd); +} + +bool QGregorianCalendar::julianFromParts(int year, int month, int day, qint64 *jd) +{ Q_ASSERT(jd); - if (!isDateValid(year, month, day)) + if (!validParts(year, month, day)) return false; if (year < 0) @@ -112,6 +144,11 @@ bool QGregorianCalendar::dateToJulianDay(int year, int month, int day, qint64 *j QCalendar::YearMonthDay QGregorianCalendar::julianDayToDate(qint64 jd) const { + return partsFromJulian(jd); +} + +QCalendar::YearMonthDay QGregorianCalendar::partsFromJulian(qint64 jd) +{ /* * Math from The Calendar FAQ at http://www.tondering.dk/claus/cal/julperiod.php * This formula is correct for all julian days, when using mathematical integer |