• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KDECore

  • kdecore
  • date
kcalendarsystemislamiccivil.cpp
Go to the documentation of this file.
1/*
2 Copyright (c) 2002-2003 Carlos Moro <cfmoro@correo.uniovi.es>
3 Copyright (c) 2002-2003 Hans Petter Bieker <bieker@kde.org>
4 Copyright 2007, 2008, 2009, 2010 John Layt <john@layt.net>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20*/
21
22#include "kcalendarsystemislamiccivil_p.h"
23#include "kcalendarsystemprivate_p.h"
24
25#include <QtCore/QDate>
26
27class KCalendarSystemIslamicCivilPrivate : public KCalendarSystemPrivate
28{
29public:
30 explicit KCalendarSystemIslamicCivilPrivate(KCalendarSystemIslamicCivil *q);
31
32 virtual ~KCalendarSystemIslamicCivilPrivate();
33
34 // Virtual methods each calendar system must re-implement
35 virtual KLocale::CalendarSystem calendarSystem() const;
36 virtual void loadDefaultEraList();
37 virtual int monthsInYear(int year) const;
38 virtual int daysInMonth(int year, int month) const;
39 virtual int daysInYear(int year) const;
40 virtual int daysInWeek() const;
41 virtual bool isLeapYear(int year) const;
42 virtual bool hasLeapMonths() const;
43 virtual bool hasYearZero() const;
44 virtual int maxDaysInWeek() const;
45 virtual int maxMonthsInYear() const;
46 virtual int earliestValidYear() const;
47 virtual int latestValidYear() const;
48 virtual QString monthName(int month, int year, KLocale::DateTimeComponentFormat format, bool possessive) const;
49 virtual QString weekDayName(int weekDay, KLocale::DateTimeComponentFormat format) const;
50};
51
52// Shared d pointer base class definitions
53
54KCalendarSystemIslamicCivilPrivate::KCalendarSystemIslamicCivilPrivate(KCalendarSystemIslamicCivil *q)
55 : KCalendarSystemPrivate(q)
56{
57}
58
59KCalendarSystemIslamicCivilPrivate::~KCalendarSystemIslamicCivilPrivate()
60{
61}
62
63KLocale::CalendarSystem KCalendarSystemIslamicCivilPrivate::calendarSystem() const
64{
65 return KLocale::IslamicCivilCalendar;
66}
67
68void KCalendarSystemIslamicCivilPrivate::loadDefaultEraList()
69{
70 QString name, shortName, format;
71 // Islamic Era, Anno Hegirae, "Year of the Hijra".
72 name = i18nc("Calendar Era: Hijri Islamic Era, years > 0, LongFormat", "Anno Hegirae");
73 shortName = i18nc("Calendar Era: Hijri Islamic Era, years > 0, ShortFormat", "AH");
74 format = i18nc("(kdedt-format) Hijri, AH, full era year format used for %EY, e.g. 2000 AH", "%Ey %EC");
75 addEra('+', 1, q->epoch(), 1, q->latestValidDate(), name, shortName, format);
76}
77
78int KCalendarSystemIslamicCivilPrivate::monthsInYear(int year) const
79{
80 Q_UNUSED(year)
81 return 12;
82}
83
84int KCalendarSystemIslamicCivilPrivate::daysInMonth(int year, int month) const
85{
86 if (month == 12 && isLeapYear(year)) {
87 return 30;
88 }
89
90 if (month % 2 == 0) { // Even number months have 29 days
91 return 29;
92 } else { // Odd number months have 30 days
93 return 30;
94 }
95}
96
97int KCalendarSystemIslamicCivilPrivate::daysInYear(int year) const
98{
99 if (isLeapYear(year)) {
100 return 355;
101 } else {
102 return 354;
103 }
104}
105
106int KCalendarSystemIslamicCivilPrivate::daysInWeek() const
107{
108 return 7;
109}
110
111bool KCalendarSystemIslamicCivilPrivate::isLeapYear(int year) const
112{
113 // Years 2, 5, 7, 10, 13, 16, 18, 21, 24, 26, 29 of the 30 year cycle
114
115 /*
116 The following C++ code is translated from the Lisp code
117 in ``Calendrical Calculations'' by Nachum Dershowitz and
118 Edward M. Reingold, Software---Practice & Experience,
119 vol. 20, no. 9 (September, 1990), pp. 899--928.
120
121 This code is in the public domain, but any use of it
122 should publically acknowledge its source.
123 */
124
125 if ((((11 * year) + 14) % 30) < 11) {
126 return true;
127 } else {
128 return false;
129 }
130
131 // The following variations will be implemented in separate classes in 4.5
132 // May be cleaner to formally define using a case statement switch on (year % 30)
133
134 // Variation used by Bar Habraeus / Graves / Birashk / Some Microsoft products
135 // Years 2, 5, 7, 10, 13, 15, 18, 21, 24, 26, 29 of the 30 year cycle
136 // if ( ( ( ( 11 * year ) + 15 ) % 30 ) < 11 ) {
137
138 // Variation used by Bohras / Sahifa with epoch 15 July 622 jd = 1948440
139 // Years 2, 5, 8, 10, 13, 16, 19, 21, 24, 27, 29 of the 30 year cycle
140 // if ( ( ( ( 11 * year ) + 1 ) % 30 ) < 11 ) {
141}
142
143bool KCalendarSystemIslamicCivilPrivate::hasLeapMonths() const
144{
145 return false;
146}
147
148bool KCalendarSystemIslamicCivilPrivate::hasYearZero() const
149{
150 return false;
151}
152
153int KCalendarSystemIslamicCivilPrivate::maxDaysInWeek() const
154{
155 return 7;
156}
157
158int KCalendarSystemIslamicCivilPrivate::maxMonthsInYear() const
159{
160 return 12;
161}
162
163int KCalendarSystemIslamicCivilPrivate::earliestValidYear() const
164{
165 return 1;
166}
167
168int KCalendarSystemIslamicCivilPrivate::latestValidYear() const
169{
170 return 9999;
171}
172
173QString KCalendarSystemIslamicCivilPrivate::monthName(int month, int year, KLocale::DateTimeComponentFormat format, bool possessive) const
174{
175 Q_UNUSED(year);
176
177 if (format == KLocale::NarrowName) {
178 switch (month) {
179 case 1:
180 return ki18nc("Hijri month 1 - KLocale::NarrowName", "M").toString(locale());
181 case 2:
182 return ki18nc("Hijri month 2 - KLocale::NarrowName", "S").toString(locale());
183 case 3:
184 return ki18nc("Hijri month 3 - KLocale::NarrowName", "A").toString(locale());
185 case 4:
186 return ki18nc("Hijri month 4 - KLocale::NarrowName", "T").toString(locale());
187 case 5:
188 return ki18nc("Hijri month 5 - KLocale::NarrowName", "A").toString(locale());
189 case 6:
190 return ki18nc("Hijri month 6 - KLocale::NarrowName", "T").toString(locale());
191 case 7:
192 return ki18nc("Hijri month 7 - KLocale::NarrowName", "R").toString(locale());
193 case 8:
194 return ki18nc("Hijri month 8 - KLocale::NarrowName", "S").toString(locale());
195 case 9:
196 return ki18nc("Hijri month 9 - KLocale::NarrowName", "R").toString(locale());
197 case 10:
198 return ki18nc("Hijri month 10 - KLocale::NarrowName", "S").toString(locale());
199 case 11:
200 return ki18nc("Hijri month 11 - KLocale::NarrowName", "Q").toString(locale());
201 case 12:
202 return ki18nc("Hijri month 12 - KLocale::NarrowName", "H").toString(locale());
203 default:
204 return QString();
205 }
206 }
207
208 if (format == KLocale::ShortName && possessive) {
209 switch (month) {
210 case 1:
211 return ki18nc("Hijri month 1 - KLocale::ShortName Possessive", "of Muh").toString(locale());
212 case 2:
213 return ki18nc("Hijri month 2 - KLocale::ShortName Possessive", "of Saf").toString(locale());
214 case 3:
215 return ki18nc("Hijri month 3 - KLocale::ShortName Possessive", "of R.A").toString(locale());
216 case 4:
217 return ki18nc("Hijri month 4 - KLocale::ShortName Possessive", "of R.T").toString(locale());
218 case 5:
219 return ki18nc("Hijri month 5 - KLocale::ShortName Possessive", "of J.A").toString(locale());
220 case 6:
221 return ki18nc("Hijri month 6 - KLocale::ShortName Possessive", "of J.T").toString(locale());
222 case 7:
223 return ki18nc("Hijri month 7 - KLocale::ShortName Possessive", "of Raj").toString(locale());
224 case 8:
225 return ki18nc("Hijri month 8 - KLocale::ShortName Possessive", "of Sha").toString(locale());
226 case 9:
227 return ki18nc("Hijri month 9 - KLocale::ShortName Possessive", "of Ram").toString(locale());
228 case 10:
229 return ki18nc("Hijri month 10 - KLocale::ShortName Possessive", "of Shw").toString(locale());
230 case 11:
231 return ki18nc("Hijri month 11 - KLocale::ShortName Possessive", "of Qid").toString(locale());
232 case 12:
233 return ki18nc("Hijri month 12 - KLocale::ShortName Possessive", "of Hij").toString(locale());
234 default:
235 return QString();
236 }
237 }
238
239 if (format == KLocale::ShortName && !possessive) {
240 switch (month) {
241 case 1:
242 return ki18nc("Hijri month 1 - KLocale::ShortName", "Muh").toString(locale());
243 case 2:
244 return ki18nc("Hijri month 2 - KLocale::ShortName", "Saf").toString(locale());
245 case 3:
246 return ki18nc("Hijri month 3 - KLocale::ShortName", "R.A").toString(locale());
247 case 4:
248 return ki18nc("Hijri month 4 - KLocale::ShortName", "R.T").toString(locale());
249 case 5:
250 return ki18nc("Hijri month 5 - KLocale::ShortName", "J.A").toString(locale());
251 case 6:
252 return ki18nc("Hijri month 6 - KLocale::ShortName", "J.T").toString(locale());
253 case 7:
254 return ki18nc("Hijri month 7 - KLocale::ShortName", "Raj").toString(locale());
255 case 8:
256 return ki18nc("Hijri month 8 - KLocale::ShortName", "Sha").toString(locale());
257 case 9:
258 return ki18nc("Hijri month 9 - KLocale::ShortName", "Ram").toString(locale());
259 case 10:
260 return ki18nc("Hijri month 10 - KLocale::ShortName", "Shw").toString(locale());
261 case 11:
262 return ki18nc("Hijri month 11 - KLocale::ShortName", "Qid").toString(locale());
263 case 12:
264 return ki18nc("Hijri month 12 - KLocale::ShortName", "Hij").toString(locale());
265 default:
266 return QString();
267 }
268 }
269
270 if (format == KLocale::LongName && possessive) {
271 switch (month) {
272 case 1:
273 return ki18nc("Hijri month 1 - KLocale::LongName Possessive", "of Muharram").toString(locale());
274 case 2:
275 return ki18nc("Hijri month 2 - KLocale::LongName Possessive", "of Safar").toString(locale());
276 case 3:
277 return ki18nc("Hijri month 3 - KLocale::LongName Possessive", "of Rabi` al-Awal").toString(locale());
278 case 4:
279 return ki18nc("Hijri month 4 - KLocale::LongName Possessive", "of Rabi` al-Thaani").toString(locale());
280 case 5:
281 return ki18nc("Hijri month 5 - KLocale::LongName Possessive", "of Jumaada al-Awal").toString(locale());
282 case 6:
283 return ki18nc("Hijri month 6 - KLocale::LongName Possessive", "of Jumaada al-Thaani").toString(locale());
284 case 7:
285 return ki18nc("Hijri month 7 - KLocale::LongName Possessive", "of Rajab").toString(locale());
286 case 8:
287 return ki18nc("Hijri month 8 - KLocale::LongName Possessive", "of Sha`ban").toString(locale());
288 case 9:
289 return ki18nc("Hijri month 9 - KLocale::LongName Possessive", "of Ramadan").toString(locale());
290 case 10:
291 return ki18nc("Hijri month 10 - KLocale::LongName Possessive", "of Shawwal").toString(locale());
292 case 11:
293 return ki18nc("Hijri month 11 - KLocale::LongName Possessive", "of Thu al-Qi`dah").toString(locale());
294 case 12:
295 return ki18nc("Hijri month 12 - KLocale::LongName Possessive", "of Thu al-Hijjah").toString(locale());
296 default:
297 return QString();
298 }
299 }
300
301 // Default to LongName
302 switch (month) {
303 case 1:
304 return ki18nc("Hijri month 1 - KLocale::LongName", "Muharram").toString(locale());
305 case 2:
306 return ki18nc("Hijri month 2 - KLocale::LongName", "Safar").toString(locale());
307 case 3:
308 return ki18nc("Hijri month 3 - KLocale::LongName", "Rabi` al-Awal").toString(locale());
309 case 4:
310 return ki18nc("Hijri month 4 - KLocale::LongName", "Rabi` al-Thaani").toString(locale());
311 case 5:
312 return ki18nc("Hijri month 5 - KLocale::LongName", "Jumaada al-Awal").toString(locale());
313 case 6:
314 return ki18nc("Hijri month 6 - KLocale::LongName", "Jumaada al-Thaani").toString(locale());
315 case 7:
316 return ki18nc("Hijri month 7 - KLocale::LongName", "Rajab").toString(locale());
317 case 8:
318 return ki18nc("Hijri month 8 - KLocale::LongName", "Sha`ban").toString(locale());
319 case 9:
320 return ki18nc("Hijri month 9 - KLocale::LongName", "Ramadan").toString(locale());
321 case 10:
322 return ki18nc("Hijri month 10 - KLocale::LongName", "Shawwal").toString(locale());
323 case 11:
324 return ki18nc("Hijri month 11 - KLocale::LongName", "Thu al-Qi`dah").toString(locale());
325 case 12:
326 return ki18nc("Hijri month 12 - KLocale::LongName", "Thu al-Hijjah").toString(locale());
327 default:
328 return QString();
329 }
330}
331
332QString KCalendarSystemIslamicCivilPrivate::weekDayName(int weekDay, KLocale::DateTimeComponentFormat format) const
333{
334 if (format == KLocale::NarrowName) {
335 switch (weekDay) {
336 case 1:
337 return ki18nc("Hijri weekday 1 - KLocale::NarrowName ", "I").toString(locale());
338 case 2:
339 return ki18nc("Hijri weekday 2 - KLocale::NarrowName ", "T").toString(locale());
340 case 3:
341 return ki18nc("Hijri weekday 3 - KLocale::NarrowName ", "A").toString(locale());
342 case 4:
343 return ki18nc("Hijri weekday 4 - KLocale::NarrowName ", "K").toString(locale());
344 case 5:
345 return ki18nc("Hijri weekday 5 - KLocale::NarrowName ", "J").toString(locale());
346 case 6:
347 return ki18nc("Hijri weekday 6 - KLocale::NarrowName ", "S").toString(locale());
348 case 7:
349 return ki18nc("Hijri weekday 7 - KLocale::NarrowName ", "A").toString(locale());
350 default:
351 return QString();
352 }
353 }
354
355 if (format == KLocale::ShortName || format == KLocale:: ShortNumber) {
356 switch (weekDay) {
357 case 1:
358 return ki18nc("Hijri weekday 1 - KLocale::ShortName", "Ith").toString(locale());
359 case 2:
360 return ki18nc("Hijri weekday 2 - KLocale::ShortName", "Thl").toString(locale());
361 case 3:
362 return ki18nc("Hijri weekday 3 - KLocale::ShortName", "Arb").toString(locale());
363 case 4:
364 return ki18nc("Hijri weekday 4 - KLocale::ShortName", "Kha").toString(locale());
365 case 5:
366 return ki18nc("Hijri weekday 5 - KLocale::ShortName", "Jum").toString(locale());
367 case 6:
368 return ki18nc("Hijri weekday 6 - KLocale::ShortName", "Sab").toString(locale());
369 case 7:
370 return ki18nc("Hijri weekday 7 - KLocale::ShortName", "Ahd").toString(locale());
371 default: return QString();
372 }
373 }
374
375 switch (weekDay) {
376 case 1:
377 return ki18nc("Hijri weekday 1 - KLocale::LongName", "Yaum al-Ithnain").toString(locale());
378 case 2:
379 return ki18nc("Hijri weekday 2 - KLocale::LongName", "Yau al-Thulatha").toString(locale());
380 case 3:
381 return ki18nc("Hijri weekday 3 - KLocale::LongName", "Yaum al-Arbi'a").toString(locale());
382 case 4:
383 return ki18nc("Hijri weekday 4 - KLocale::LongName", "Yaum al-Khamees").toString(locale());
384 case 5:
385 return ki18nc("Hijri weekday 5 - KLocale::LongName", "Yaum al-Jumma").toString(locale());
386 case 6:
387 return ki18nc("Hijri weekday 6 - KLocale::LongName", "Yaum al-Sabt").toString(locale());
388 case 7:
389 return ki18nc("Hijri weekday 7 - KLocale::LongName", "Yaum al-Ahad").toString(locale());
390 default:
391 return QString();
392 }
393}
394
395
396KCalendarSystemIslamicCivil::KCalendarSystemIslamicCivil(const KLocale *locale)
397 : KCalendarSystem(*new KCalendarSystemIslamicCivilPrivate(this), KSharedConfig::Ptr(), locale)
398{
399 d_ptr->loadConfig(calendarType());
400}
401
402KCalendarSystemIslamicCivil::KCalendarSystemIslamicCivil(const KSharedConfig::Ptr config, const KLocale *locale)
403 : KCalendarSystem(*new KCalendarSystemIslamicCivilPrivate(this), config, locale)
404{
405 d_ptr->loadConfig(calendarType());
406}
407
408KCalendarSystemIslamicCivil::KCalendarSystemIslamicCivil(KCalendarSystemIslamicCivilPrivate &dd,
409 const KSharedConfig::Ptr config, const KLocale *locale)
410 : KCalendarSystem(dd, config, locale)
411{
412 d_ptr->loadConfig(calendarType());
413}
414
415KCalendarSystemIslamicCivil::~KCalendarSystemIslamicCivil()
416{
417}
418
419QString KCalendarSystemIslamicCivil::calendarType() const
420{
421 return QLatin1String("hijri");
422}
423
424QDate KCalendarSystemIslamicCivil::epoch() const
425{
426 // 16 July 622 in the Julian calendar
427 return QDate::fromJulianDay(1948440);
428}
429
430QDate KCalendarSystemIslamicCivil::earliestValidDate() const
431{
432 return epoch();
433}
434
435QDate KCalendarSystemIslamicCivil::latestValidDate() const
436{
437 // Set to last day of year 9999
438 // Last day of Islamic Civil year 9999 is 9999-12-29
439 return QDate::fromJulianDay(5491751);
440}
441
442bool KCalendarSystemIslamicCivil::isValid(int year, int month, int day) const
443{
444 return KCalendarSystem::isValid(year, month, day);
445}
446
447bool KCalendarSystemIslamicCivil::isValid(const QDate &date) const
448{
449 return KCalendarSystem::isValid(date);
450}
451
452bool KCalendarSystemIslamicCivil::isLeapYear(int year) const
453{
454 return KCalendarSystem::isLeapYear(year);
455}
456
457bool KCalendarSystemIslamicCivil::isLeapYear(const QDate &date) const
458{
459 return KCalendarSystem::isLeapYear(date);
460}
461
462QString KCalendarSystemIslamicCivil::monthName(int month, int year, MonthNameFormat format) const
463{
464 return KCalendarSystem::monthName(month, year, format);
465}
466
467QString KCalendarSystemIslamicCivil::monthName(const QDate &date, MonthNameFormat format) const
468{
469 return KCalendarSystem::monthName(date, format);
470}
471
472QString KCalendarSystemIslamicCivil::weekDayName(int weekDay, WeekDayNameFormat format) const
473{
474 return KCalendarSystem::weekDayName(weekDay, format);
475}
476
477QString KCalendarSystemIslamicCivil::weekDayName(const QDate &date, WeekDayNameFormat format) const
478{
479 return KCalendarSystem::weekDayName(date, format);
480}
481
482int KCalendarSystemIslamicCivil::weekDayOfPray() const
483{
484 return 5; // Friday
485}
486
487bool KCalendarSystemIslamicCivil::isLunar() const
488{
489 return true;
490}
491
492bool KCalendarSystemIslamicCivil::isLunisolar() const
493{
494 return false;
495}
496
497bool KCalendarSystemIslamicCivil::isSolar() const
498{
499 return false;
500}
501
502bool KCalendarSystemIslamicCivil::isProleptic() const
503{
504 return false;
505}
506
507bool KCalendarSystemIslamicCivil::julianDayToDate(int jd, int &year, int &month, int &day) const
508{
509 Q_D(const KCalendarSystemIslamicCivil);
510
511 /*
512 The following C++ code is translated from the Lisp code
513 in ``Calendrical Calculations'' by Nachum Dershowitz and
514 Edward M. Reingold, Software---Practice & Experience,
515 vol. 20, no. 9 (September, 1990), pp. 899--928.
516
517 This code is in the public domain, but any use of it
518 should publically acknowledge its source.
519 */
520
521 // Search forward year by year from approximate year
522 year = (jd - epoch().toJulianDay()) / 355;
523 int testJd;
524 dateToJulianDay(year, 12, d->daysInMonth(year, 12), testJd);
525 while (jd > testJd) {
526 year++;
527 dateToJulianDay(year, 12, d->daysInMonth(year, 12), testJd);
528 }
529
530 // Search forward month by month from Muharram
531 month = 1;
532 dateToJulianDay(year, month, d->daysInMonth(year, month), testJd);
533 while (jd > testJd) {
534 month++;
535 dateToJulianDay(year, month, d->daysInMonth(year, month), testJd);
536 }
537
538 dateToJulianDay(year, month, 1, testJd);
539 day = jd - testJd + 1;
540
541 return true;
542
543 // Alternative implementations
544
545 // More recent editions of "Calendrical Calculations" by Dershowitz & Reingold have a more
546 // efficient direct calculation without recusrion, but this cannot be used due to licensing
547
548 /*
549 Formula from "Explanatory Supplement to the Astronomical Almanac" 2006, derived from Fliegel & Van Flandern 1968
550 int L = jd - epoch().toJulianDay() + 10632;
551 int N = ( L - 1 ) / 10631;
552 L = L - 10631 * N + 354;
553 int J = ( ( 10985 - L ) / 5316 ) x ( ( 50* L ) / 17719 ) + ( L / 5670 ) * ( ( 43 * L ) / 15238 );
554 L = L - ( ( 30 - J ) / 15 ) * ( ( 17719 * J ) / 50 ) - ( J / 16 ) * ( ( 15238 * J ) / 43 ) + 29;
555 year = ( 30 * N ) + J - 30;
556 month = ( 24 * L ) / 709;
557 day = L - ( ( 709 * month ) / 24 );
558 */
559
560 /*
561 Formula from Fourmilab website
562 jd = Math.floor(jd) + 0.5;
563 year = Math.floor(((30 * (jd - epoch().toJulianDay())) + 10646) / 10631);
564 month = qMin(12, Math.ceil((jd - (29 + islamic_to_jd(year, 1, 1))) / 29.5) + 1);
565 day = (jd - islamic_to_jd(year, month, 1)) + 1;
566 */
567}
568
569bool KCalendarSystemIslamicCivil::dateToJulianDay(int year, int month, int day, int &jd) const
570{
571 /*
572 The following C++ code is translated from the Lisp code
573 in ``Calendrical Calculations'' by Nachum Dershowitz and
574 Edward M. Reingold, Software---Practice & Experience,
575 vol. 20, no. 9 (September, 1990), pp. 899--928.
576
577 This code is in the public domain, but any use of it
578 should publically acknowledge its source.
579 */
580
581 jd = epoch().toJulianDay() - 1 + // days before start of calendar
582 (year - 1) * 354 + // non-leap days in prior years
583 (3 + (11 * year)) / 30 + // leap days in prior years
584 29 * (month - 1) + // days so far...
585 month / 2 + // ...this year
586 day; // days so far this month
587
588 return true;
589
590 // Alternative implementations
591
592 /*
593 Formula from "Explanatory Supplement to the Astronomical Almanac" 2006, derived from Fliegel & Van Flandern 1968
594 jd = ( 3 + ( 11 * year ) ) / 30 + 354 * year + 30 * month - ( month - 1 ) / 2 + day + epoch().toJulianDay() - 385;
595 */
596}
KCalendarSystemIslamicCivil
Definition: kcalendarsystemislamiccivil_p.h:44
KCalendarSystemIslamicCivil::julianDayToDate
virtual bool julianDayToDate(int jd, int &year, int &month, int &day) const
Internal method to convert a Julian Day number into the YMD values for this calendar system.
Definition: kcalendarsystemislamiccivil.cpp:507
KCalendarSystemIslamicCivil::weekDayOfPray
virtual int weekDayOfPray() const
Definition: kcalendarsystemislamiccivil.cpp:482
KCalendarSystemIslamicCivil::calendarType
virtual QString calendarType() const
Definition: kcalendarsystemislamiccivil.cpp:419
KCalendarSystemIslamicCivil::dateToJulianDay
virtual bool dateToJulianDay(int year, int month, int day, int &jd) const
Internal method to convert YMD values for this calendar system into a Julian Day number.
Definition: kcalendarsystemislamiccivil.cpp:569
KCalendarSystemIslamicCivil::weekDayName
virtual QString weekDayName(int weekDay, WeekDayNameFormat format=LongDayName) const
Gets specific calendar type week day name.
Definition: kcalendarsystemislamiccivil.cpp:472
KCalendarSystemIslamicCivil::isValid
virtual bool isValid(int year, int month, int day) const
Returns whether a given date is valid in this calendar system.
Definition: kcalendarsystemislamiccivil.cpp:442
KCalendarSystemIslamicCivil::isLunisolar
virtual bool isLunisolar() const
Returns whether the calendar is lunisolar based.
Definition: kcalendarsystemislamiccivil.cpp:492
KCalendarSystemIslamicCivil::monthName
virtual QString monthName(int month, int year, MonthNameFormat format=LongName) const
Gets specific calendar type month name for a given month number If an invalid month is specified,...
Definition: kcalendarsystemislamiccivil.cpp:462
KCalendarSystemIslamicCivil::earliestValidDate
virtual QDate earliestValidDate() const
Returns the earliest date valid in this calendar system implementation.
Definition: kcalendarsystemislamiccivil.cpp:430
KCalendarSystemIslamicCivil::epoch
virtual QDate epoch() const
Returns a QDate holding the epoch of the calendar system.
Definition: kcalendarsystemislamiccivil.cpp:424
KCalendarSystemIslamicCivil::~KCalendarSystemIslamicCivil
virtual ~KCalendarSystemIslamicCivil()
Definition: kcalendarsystemislamiccivil.cpp:415
KCalendarSystemIslamicCivil::isLunar
virtual bool isLunar() const
Returns whether the calendar is lunar based.
Definition: kcalendarsystemislamiccivil.cpp:487
KCalendarSystemIslamicCivil::isSolar
virtual bool isSolar() const
Returns whether the calendar is solar based.
Definition: kcalendarsystemislamiccivil.cpp:497
KCalendarSystemIslamicCivil::isLeapYear
virtual bool isLeapYear(int year) const
Returns whether a given year is a leap year.
Definition: kcalendarsystemislamiccivil.cpp:452
KCalendarSystemIslamicCivil::latestValidDate
virtual QDate latestValidDate() const
Returns the latest date valid in this calendar system implementation.
Definition: kcalendarsystemislamiccivil.cpp:435
KCalendarSystemIslamicCivil::isProleptic
virtual bool isProleptic() const
Returns whether the calendar system is proleptic, i.e.
Definition: kcalendarsystemislamiccivil.cpp:502
KCalendarSystemPrivate
Definition: kcalendarsystemprivate_p.h:32
KCalendarSystemPrivate::latestValidYear
virtual int latestValidYear() const
Definition: kcalendarsystem.cpp:380
KCalendarSystemPrivate::monthName
virtual QString monthName(int month, int year, KLocale::DateTimeComponentFormat format, bool possessive=false) const
Definition: kcalendarsystem.cpp:387
KCalendarSystemPrivate::isLeapYear
virtual bool isLeapYear(int year) const
Definition: kcalendarsystem.cpp:322
KCalendarSystemPrivate::calendarSystem
virtual KLocale::CalendarSystem calendarSystem() const
Definition: kcalendarsystem.cpp:261
KCalendarSystemPrivate::q
const KCalendarSystem * q
Definition: kcalendarsystemprivate_p.h:104
KCalendarSystemPrivate::daysInYear
virtual int daysInYear(int year) const
Definition: kcalendarsystem.cpp:304
KCalendarSystemPrivate::weekDayName
virtual QString weekDayName(int weekDay, KLocale::DateTimeComponentFormat format) const
Definition: kcalendarsystem.cpp:398
KCalendarSystemPrivate::earliestValidYear
virtual int earliestValidYear() const
Definition: kcalendarsystem.cpp:371
KCalendarSystemPrivate::loadDefaultEraList
virtual void loadDefaultEraList()
Definition: kcalendarsystem.cpp:269
KCalendarSystemPrivate::hasYearZero
virtual bool hasYearZero() const
Definition: kcalendarsystem.cpp:348
KCalendarSystemPrivate::daysInMonth
virtual int daysInMonth(int year, int month) const
Definition: kcalendarsystem.cpp:285
KCalendarSystemPrivate::hasLeapMonths
virtual bool hasLeapMonths() const
Definition: kcalendarsystem.cpp:341
KCalendarSystemPrivate::monthsInYear
virtual int monthsInYear(int year) const
Definition: kcalendarsystem.cpp:277
KCalendarSystemPrivate::maxDaysInWeek
virtual int maxDaysInWeek() const
Definition: kcalendarsystem.cpp:355
KCalendarSystemPrivate::daysInWeek
virtual int daysInWeek() const
Definition: kcalendarsystem.cpp:315
KCalendarSystemPrivate::maxMonthsInYear
virtual int maxMonthsInYear() const
Definition: kcalendarsystem.cpp:362
KCalendarSystem
KCalendarSystem abstract base class, provides support for local Calendar Systems in KDE.
Definition: kcalendarsystem.h:41
KCalendarSystem::day
virtual int day(const QDate &date) const
Returns the day portion of a given date in the current calendar system.
Definition: kcalendarsystem.cpp:1357
KCalendarSystem::monthName
virtual QString monthName(int month, int year, MonthNameFormat format=LongName) const =0
Gets specific calendar type month name for a given month number If an invalid month is specified,...
Definition: kcalendarsystem.cpp:1842
KCalendarSystem::year
virtual int year(const QDate &date) const
Returns the year portion of a given date in the current calendar system.
Definition: kcalendarsystem.cpp:1331
KCalendarSystem::isLeapYear
virtual bool isLeapYear(int year) const =0
Returns whether a given year is a leap year.
Definition: kcalendarsystem.cpp:1720
KCalendarSystem::KCalendarSystemIslamicCivil
friend class KCalendarSystemIslamicCivil
Definition: kcalendarsystem.h:1670
KCalendarSystem::MonthNameFormat
MonthNameFormat
Format for returned month / day name.
Definition: kcalendarsystem.h:55
KCalendarSystem::WeekDayNameFormat
WeekDayNameFormat
Format for returned month / day name.
Definition: kcalendarsystem.h:66
KCalendarSystem::isValid
virtual bool isValid(int year, int month, int day) const =0
Returns whether a given date is valid in this calendar system.
Definition: kcalendarsystem.cpp:1133
KCalendarSystem::weekDayName
virtual QString weekDayName(int weekDay, WeekDayNameFormat format=LongDayName) const =0
Gets specific calendar type week day name.
Definition: kcalendarsystem.cpp:1881
KCalendarSystem::month
virtual int month(const QDate &date) const
Returns the month portion of a given date in the current calendar system.
Definition: kcalendarsystem.cpp:1344
KLocale
KLocale provides support for country specific stuff like the national language.
Definition: klocale.h:70
KLocale::CalendarSystem
CalendarSystem
Definition: klocale.h:780
KLocale::IslamicCivilCalendar
@ IslamicCivilCalendar
Islamic Civil Calendar, aka Hijri, not the Lunar Calendar.
Definition: klocale.h:792
KLocale::DateTimeComponentFormat
DateTimeComponentFormat
Definition: klocale.h:908
KLocale::LongName
@ LongName
Long text format, e.g.
Definition: klocale.h:915
KLocale::ShortName
@ ShortName
Short text format, e.g.
Definition: klocale.h:914
KLocale::NarrowName
@ NarrowName
Narrow text format, may not be unique, e.g.
Definition: klocale.h:913
KLocale::ShortNumber
@ ShortNumber
Number at its natural width, e.g.
Definition: klocale.h:910
KLocalizedString::toString
QString toString() const
Finalizes the translation, creates QString with placeholders substituted.
Definition: klocalizedstring.cpp:192
KSharedConfig
KConfig variant using shared memory.
Definition: ksharedconfig.h:41
KSharedPtr< KSharedConfig >
QString
kcalendarsystemislamiccivil_p.h
kcalendarsystemprivate_p.h
ki18nc
KLocalizedString ki18nc(const char *ctxt, const char *msg)
Creates localized string from a given message, with added context.
Definition: klocalizedstring.cpp:929
i18nc
QString i18nc(const char *ctxt, const char *text)
Returns a localized version of a string and a context.
Definition: klocalizedstring.h:797
KGlobal::locale
KLocale * locale()
Returns the global locale object.
Definition: kglobal.cpp:170
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDECore

Skip menu "KDECore"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal