16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ****************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2003-2013, International Business Machines Corporation 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ****************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * File PERSNCAL.H 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Modification History: 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Date Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 9/23/2003 mehran posted to icu-design 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ***************************************************************************** 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef PERSNCAL_H 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PERSNCAL_H 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>PersianCalendar</code> is a subclass of <code>Calendar</code> 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that implements the Persian calendar. It is used as the official 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar in Iran. This calendar is also known as the "Hijri Shamsi" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar, since it starts at the time of Mohammed's emigration (or 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * "hijra") to Medinah on Thursday, July 15, 622 AD (Julian) and is a 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * solar calendar system (or "shamsi"). 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p> 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The Persian calendar is strictly solar, and thus a Persian year has twelve 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * solar months. A Persian year is about 365 days long, except in leap years 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which is 366 days long. 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p> 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The six first months of Persian Calendar are 31 days long. The next five 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * months are 30 days long. The last month is 29 days long in normal years, 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and 30 days long in leap years. 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see GregorianCalendar 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @author Mehran Mehr 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass PersianCalendar : public Calendar { 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public: 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Constants... 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constants for the months 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum EMonths { 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Farvardin, the 1st month of the Persian year. 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FARVARDIN = 0, 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Ordibehesht, the 2nd month of the Persian year. 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ORDIBEHESHT = 1, 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Khordad, the 3rd month of the Persian year. 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org KHORDAD = 2, 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Tir, the 4th month of the Persian year. 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TIR = 3, 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Mordad, the 5th month of the Persian year. 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MORDAD = 4, 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Shahrivar, the 6th month of the Persian year. 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SHAHRIVAR = 5, 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Mehr, the 7th month of the Persian year. 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MEHR = 6, 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Aban, the 8th month of the Persian year. 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ABAN = 7, 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Azar, the 9th month of the Persian year. 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org AZAR = 8, 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Dei, the 10th month of the Persian year. 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DEI = 9, 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Bahman, the 11th month of the Persian year. 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BAHMAN = 10, 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant for Esfand, the 12th month of the Persian year. 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ESFAND = 11, 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org PERSIAN_MONTH_MAX 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Constructors... 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a PersianCalendar based on the current time in the default time zone 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the given locale. 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param aLocale The given locale. 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of PersianCalendar object construction. 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org PersianCalendar(const Locale& aLocale, UErrorCode &success); 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy Constructor 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org PersianCalendar(const PersianCalendar& other); 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Destructor. 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~PersianCalendar(); 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // TODO: copy c'tor, etc 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // clone 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual Calendar* clone() const; 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine whether a year is a leap year in the Persian calendar 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UBool isLeapYear(int32_t year); 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the day # on which the given year starts. Days are counted 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * from the Hijri epoch, origin 0. 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t yearStart(int32_t year); 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the day # on which the given month starts. Days are counted 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * from the Hijri epoch, origin 0. 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The hijri shamsi year 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The hijri shamsi month, 0-based 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t monthStart(int32_t year, int32_t month) const; 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //---------------------------------------------------------------------- 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Calendar framework 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //---------------------------------------------------------------------- 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected: 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the length (in days) of the given month. 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The hijri shamsi year 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The hijri shamsi month, 0-based 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the number of days in the given Persian year 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetYearLength(int32_t extendedYear) const; 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Functions for converting from field values to milliseconds.... 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Return JD of start of given month/year 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const; 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Functions for converting from milliseconds to field values 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //------------------------------------------------------------------------- 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetExtendedYear(); 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Override Calendar to compute several fields specific to the Persian 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar system. These are: 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <ul><li>ERA 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>YEAR 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>MONTH 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>DAY_OF_MONTH 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>DAY_OF_YEAR 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>EXTENDED_YEAR</ul> 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * method is called. The getGregorianXxx() methods return Gregorian 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar equivalents for the given Julian day. 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UObject stuff 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public: 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for this object. All objects of a given class have the 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * same class ID. Objects of other classes have different class IDs. 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UClassID getDynamicClassID(void) const; 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the class ID for this class. This is useful only for comparing to a return 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value from getDynamicClassID(). For example: 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Base* polymorphic_pointer = createPolymorphicObject(); 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if (polymorphic_pointer->getDynamicClassID() == 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Derived::getStaticClassID()) ... 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for all objects of this class. 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return the calendar type, "persian". 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return calendar type 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual const char * getType() const; 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org PersianCalendar(); // default constructor not implemented 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected: 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Overrides Calendar) Return true if the current date for this Calendar is in 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Daylight Savings Time. Recognizes DST_OFFSET, if it is set. 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status Fill-in parameter which receives the status of this operation. 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return True if the current date for this Calendar is in Daylight Savings Time, 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * false, otherwise. 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool inDaylightTime(UErrorCode& status) const; 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns TRUE because the Persian Calendar does have a default century 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool haveDefaultCentury() const; 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the date of the start of the default century 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return start of century - in milliseconds since epoch, 1970 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UDate defaultCenturyStart() const; 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the year in which the default century begins 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t defaultCenturyStartYear() const; 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 322