1/****************************************************************************
2**
3** Copyright (C) 2020 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtCore module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#include "qglobal.h"
41#include "qhijricalendar_p.h"
42#include "qhijricalendar_data_p.h"
43
44QT_BEGIN_NAMESPACE
45
46/*!
47 \since 5.14
48 \internal
49
50 \class QHijriCalendar
51 \inmodule QtCore
52 \brief The QHijriCalendar class supports Islamic (Hijri) calendar implementations.
53
54 \section1 Islamic Calendar System
55
56 The Islamic, Muslim, or Hijri calendar is a lunar calendar consisting of 12
57 months in a year of 354 or 355 days. It is used (often alongside the
58 Gregorian calendar) to date events in many Muslim countries. It is also used
59 by Muslims to determine the proper days of Islamic holidays and rituals,
60 such as the annual period of fasting and the proper time for the pilgrimage
61 to Mecca.
62
63 Source: \l {https://en.wikipedia.org/wiki/Islamic_calendar}{Wikipedia page
64 on Hijri Calendar}
65
66 \section1 Support for variants
67
68 This base class provides the common details shared by all variants on the
69 Islamic calendar. Each year comprises 12 months of 29 or 30 days each; most
70 years have as many of 29 as of 30, but leap years extend one 29-day month to
71 30 days. In tabular versions of the calendar (where mathematical rules are
72 used to determine the details), odd-numbered months have 30 days, as does
73 the last (twelfth) month of a leap year; all other months have 29
74 days. Other versions are based on actual astronomical observations of the
75 moon's phase at sunset, which vary from place to place.
76
77 \sa QIslamicCivilCalendar, QCalendar
78*/
79
80bool QHijriCalendar::isLunar() const
81{
82 return true;
83}
84
85bool QHijriCalendar::isLuniSolar() const
86{
87 return false;
88}
89
90bool QHijriCalendar::isSolar() const
91{
92 return false;
93}
94
95int QHijriCalendar::daysInMonth(int month, int year) const
96{
97 if (year == 0 || month < 1 || month > 12)
98 return 0;
99
100 if (month == 12 && isLeapYear(year))
101 return 30;
102
103 return month % 2 == 0 ? 29 : 30;
104}
105
106int QHijriCalendar::maximumDaysInMonth() const
107{
108 return 30;
109}
110
111int QHijriCalendar::daysInYear(int year) const
112{
113 return monthsInYear(year) ? isLeapYear(year) ? 355 : 354 : 0;
114}
115
116const QCalendarLocale *QHijriCalendar::localeMonthIndexData() const
117{
118 return locale_data;
119}
120
121const char16_t *QHijriCalendar::localeMonthData() const
122{
123 return months_data;
124}
125
126QT_END_NAMESPACE
127