16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1997-2013, International Business Machines Corporation and others. 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* All Rights Reserved. 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File GREGOCAL.H 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Description 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 04/22/97 aliu Overhauled header. 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 07/28/98 stephen Sync with JDK 1.2 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 09/04/98 stephen Re-sync with JDK 8/31 putback 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 09/14/98 stephen Changed type of kOneDay, kOneWeek to double. 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Fixed bug in roll() 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation. 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Added documentation of WEEK_OF_YEAR computation. 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD. 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* {JDK bug 4210209 4209272} 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 11/07/2003 srl Update, clean up documentation. 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef GREGOCAL_H 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define GREGOCAL_H 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Concrete class which provides the standard calendar. 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Concrete class which provides the standard calendar used by most of the world. 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P> 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The standard (Gregorian) calendar has 2 eras, BC and AD. 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P> 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This implementation handles a single discontinuity, which corresponds by default to 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the date the Gregorian calendar was originally instituted (October 15, 1582). Not all 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * countries adopted the Gregorian calendar then, so this cutover date may be changed by 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the caller. 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P> 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Prior to the institution of the Gregorian Calendar, New Year's Day was March 25. To 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * avoid confusion, this Calendar always uses January 1. A manual adjustment may be made 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if desired for dates that are prior to the Gregorian changeover and which fall 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * between January 1 and March 24. 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Values calculated for the <code>WEEK_OF_YEAR</code> field range from 1 to 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 53. Week 1 for a year is the first week that contains at least 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>getMinimalDaysInFirstWeek()</code> days from that year. It thus 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * depends on the values of <code>getMinimalDaysInFirstWeek()</code>, 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>getFirstDayOfWeek()</code>, and the day of the week of January 1. 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Weeks between week 1 of one year and week 1 of the following year are 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * numbered sequentially from 2 to 52 or 53 (as needed). 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>For example, January 1, 1998 was a Thursday. If 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>getFirstDayOfWeek()</code> is <code>MONDAY</code> and 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>getMinimalDaysInFirstWeek()</code> is 4 (these are the values 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on December 29, 1997, and ends on January 4, 1998. If, however, 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>, then week 1 of 1998 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starts on January 4, 1998, and ends on January 10, 1998; the first three days 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of 1998 then are part of week 53 of 1997. 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Example for using GregorianCalendar: 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre> 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // get the supported ids for GMT-08:00 (Pacific Standard Time) 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UErrorCode success = U_ZERO_ERROR; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * const StringEnumeration *ids = TimeZone::createEnumeration(-8 * 60 * 60 * 1000); 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // if no ids were returned, something is wrong. get out. 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if (ids == 0 || ids->count(success) == 0) { 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return; 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * } 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // begin output 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "Current Time" << endl; 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // create a Pacific Standard Time time zone 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids->unext(NULL, success))); 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // set up rules for daylight savings time 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pdt->setStartRule(UCAL_MARCH, 1, UCAL_SUNDAY, 2 * 60 * 60 * 1000); 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pdt->setEndRule(UCAL_NOVEMBER, 2, UCAL_SUNDAY, 2 * 60 * 60 * 1000); 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // create a GregorianCalendar with the Pacific Daylight time zone 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // and the current date and time 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Calendar* calendar = new GregorianCalendar( pdt, success ); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // print out a bunch of interesting things 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "ERA: " << calendar->get( UCAL_ERA, success ) << endl; 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "YEAR: " << calendar->get( UCAL_YEAR, success ) << endl; 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "MONTH: " << calendar->get( UCAL_MONTH, success ) << endl; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "WEEK_OF_YEAR: " << calendar->get( UCAL_WEEK_OF_YEAR, success ) << endl; 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "WEEK_OF_MONTH: " << calendar->get( UCAL_WEEK_OF_MONTH, success ) << endl; 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DATE: " << calendar->get( UCAL_DATE, success ) << endl; 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_MONTH: " << calendar->get( UCAL_DAY_OF_MONTH, success ) << endl; 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_YEAR: " << calendar->get( UCAL_DAY_OF_YEAR, success ) << endl; 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_WEEK: " << calendar->get( UCAL_DAY_OF_WEEK, success ) << endl; 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( UCAL_DAY_OF_WEEK_IN_MONTH, success ) << endl; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "AM_PM: " << calendar->get( UCAL_AM_PM, success ) << endl; 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "HOUR: " << calendar->get( UCAL_HOUR, success ) << endl; 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "HOUR_OF_DAY: " << calendar->get( UCAL_HOUR_OF_DAY, success ) << endl; 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "MINUTE: " << calendar->get( UCAL_MINUTE, success ) << endl; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "SECOND: " << calendar->get( UCAL_SECOND, success ) << endl; 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "MILLISECOND: " << calendar->get( UCAL_MILLISECOND, success ) << endl; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "ZONE_OFFSET: " << (calendar->get( UCAL_ZONE_OFFSET, success )/(60*60*1000)) << endl; 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DST_OFFSET: " << (calendar->get( UCAL_DST_OFFSET, success )/(60*60*1000)) << endl; 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "Current Time, with hour reset to 3" << endl; 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar->clear(UCAL_HOUR_OF_DAY); // so doesn't override 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar->set(UCAL_HOUR, 3); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "ERA: " << calendar->get( UCAL_ERA, success ) << endl; 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "YEAR: " << calendar->get( UCAL_YEAR, success ) << endl; 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "MONTH: " << calendar->get( UCAL_MONTH, success ) << endl; 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "WEEK_OF_YEAR: " << calendar->get( UCAL_WEEK_OF_YEAR, success ) << endl; 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "WEEK_OF_MONTH: " << calendar->get( UCAL_WEEK_OF_MONTH, success ) << endl; 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DATE: " << calendar->get( UCAL_DATE, success ) << endl; 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_MONTH: " << calendar->get( UCAL_DAY_OF_MONTH, success ) << endl; 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_YEAR: " << calendar->get( UCAL_DAY_OF_YEAR, success ) << endl; 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_WEEK: " << calendar->get( UCAL_DAY_OF_WEEK, success ) << endl; 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( UCAL_DAY_OF_WEEK_IN_MONTH, success ) << endl; 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "AM_PM: " << calendar->get( UCAL_AM_PM, success ) << endl; 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "HOUR: " << calendar->get( UCAL_HOUR, success ) << endl; 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "HOUR_OF_DAY: " << calendar->get( UCAL_HOUR_OF_DAY, success ) << endl; 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "MINUTE: " << calendar->get( UCAL_MINUTE, success ) << endl; 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "SECOND: " << calendar->get( UCAL_SECOND, success ) << endl; 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "MILLISECOND: " << calendar->get( UCAL_MILLISECOND, success ) << endl; 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "ZONE_OFFSET: " << (calendar->get( UCAL_ZONE_OFFSET, success )/(60*60*1000)) << endl; // in hours 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "DST_OFFSET: " << (calendar->get( UCAL_DST_OFFSET, success )/(60*60*1000)) << endl; // in hours 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if (U_FAILURE(success)) { 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cout << "An error occured. success=" << u_errorName(success) << endl; 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * } 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * delete ids; 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * delete calendar; // also deletes pdt 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre> 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_I18N_API GregorianCalendar: public Calendar { 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Useful constants for GregorianCalendar and TimeZone. 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum EEras { 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BC, 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org AD 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a default GregorianCalendar using the current time in the default time 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * zone with the default locale. 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(UErrorCode& success); 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar based on the current time in the given time zone 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the default locale. Clients are no longer responsible for deleting the given 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * time zone object after it's adopted. 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param zoneToAdopt The given timezone. 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success); 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar based on the current time in the given time zone 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the default locale. 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param zone The given timezone. 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(const TimeZone& zone, UErrorCode& success); 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar based on the current time in the default time zone 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the given locale. 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param aLocale The given locale. 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(const Locale& aLocale, UErrorCode& success); 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar based on the current time in the given time zone 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the given locale. Clients are no longer responsible for deleting the given 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * time zone object after it's adopted. 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param zoneToAdopt The given timezone. 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param aLocale The given locale. 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success); 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar based on the current time in the given time zone 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the given locale. 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param zone The given timezone. 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param aLocale The given locale. 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success); 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar with the given AD date set in the default time 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * zone with the default locale. 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The value used to set the YEAR time field in the calendar. 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param month The value used to set the MONTH time field in the calendar. Month 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value is 0-based. e.g., 0 for January. 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param date The value used to set the DATE time field in the calendar. 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success); 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar with the given AD date and time set for the 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * default time zone with the default locale. 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The value used to set the YEAR time field in the calendar. 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param month The value used to set the MONTH time field in the calendar. Month 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value is 0-based. e.g., 0 for January. 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param date The value used to set the DATE time field in the calendar. 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param hour The value used to set the HOUR_OF_DAY time field in the calendar. 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param minute The value used to set the MINUTE time field in the calendar. 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success); 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a GregorianCalendar with the given AD date and time set for the 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * default time zone with the default locale. 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The value used to set the YEAR time field in the calendar. 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param month The value used to set the MONTH time field in the calendar. Month 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value is 0-based. e.g., 0 for January. 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param date The value used to set the DATE time field in the calendar. 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param hour The value used to set the HOUR_OF_DAY time field in the calendar. 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param minute The value used to set the MINUTE time field in the calendar. 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param second The value used to set the SECOND time field in the calendar. 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of GregorianCalendar object construction. 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success); 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Destructor 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~GregorianCalendar(); 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy constructor 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source the object to be copied. 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(const GregorianCalendar& source); 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Default assignment operator 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param right the object to be copied. 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar& operator=(const GregorianCalendar& right); 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create and return a polymorphic copy of this calendar. 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return return a polymorphic copy of this calendar. 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual Calendar* clone(void) const; 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the GregorianCalendar change date. This is the point when the switch from 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 15, 1582. Previous to this time and date will be Julian dates. 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param date The given Gregorian cutover date. 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Output param set to success/failure code on exit. 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setGregorianChange(UDate date, UErrorCode& success); 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the Gregorian Calendar change date. This is the point when the switch from 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 15, 1582. Previous to this time and date will be Julian dates. 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The Gregorian cutover time for this calendar. 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate getGregorianChange(void) const; 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return true if the given year is a leap year. Determination of whether a year is 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a leap year is actually very complicated. We do something crude and mostly 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * correct here, but for a real determination you need a lot of contextual 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * information. For example, in Sweden, the change from Julian to Gregorian happened 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in a complex way resulting in missed leap years and double leap years between 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1700 and 1753. Another example is that after the start of the Julian calendar in 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 45 B.C., the leap years did not regularize until 8 A.D. This method ignores these 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * quirks, and pays attention only to the Julian onset date and the Gregorian 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cutover (which can be changed). 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year The given year. 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return True if the given year is a leap year; false otherwise. 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isLeapYear(int32_t year) const; 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns TRUE if the given Calendar object is equivalent to this 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * one. Calendar override. 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param other the Calendar to be compared with this Calendar 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool isEquivalentTo(const Calendar& other) const; 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Overrides Calendar) Rolls up or down by the given amount in the specified field. 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For more information, see the documentation for Calendar::roll(). 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field The time field. 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param amount Indicates amount to roll. 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status Output param set to success/failure code on exit. If any value 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * previously set in the time field is invalid, this will be set to 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * an error status. 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead. 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void roll(EDateFields field, int32_t amount, UErrorCode& status); 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Overrides Calendar) Rolls up or down by the given amount in the specified field. 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For more information, see the documentation for Calendar::roll(). 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field The time field. 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param amount Indicates amount to roll. 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status Output param set to success/failure code on exit. If any value 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * previously set in the time field is invalid, this will be set to 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * an error status. 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.6. 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status); 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DEPRECATED_API 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the minimum value that this field could have, given the current date. 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field the time field. 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the minimum value that this field could have, given the current date. 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead. 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getActualMinimum(EDateFields field) const; 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the minimum value that this field could have, given the current date. 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field the time field. 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the minimum value that this field could have, given the current date. 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead. (Added to ICU 3.0 for signature consistency) 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getActualMinimum(EDateFields field, UErrorCode& status) const; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DEPRECATED_API */ 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the minimum value that this field could have, given the current date. 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field the time field. 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status error result. 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the minimum value that this field could have, given the current date. 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const; 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DEPRECATED_API 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the maximum value that this field could have, given the current date. 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * maximum would be 28; for "Feb 3, 1996" it s 29. Similarly for a Hebrew calendar, 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for some years the actual maximum for MONTH is 12, and for others 13. 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field the time field. 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the maximum value that this field could have, given the current date. 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @deprecated ICU 2.6. Use getActualMaximum(UCalendarDateFields field) instead. 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getActualMaximum(EDateFields field) const; 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DEPRECATED_API */ 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the maximum value that this field could have, given the current date. 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * maximum would be 28; for "Feb 3, 1996" it s 29. Similarly for a Hebrew calendar, 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for some years the actual maximum for MONTH is 12, and for others 13. 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field the time field. 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status returns any errors that may result from this function call. 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the maximum value that this field could have, given the current date. 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.6 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const; 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Overrides Calendar) Return true if the current date for this Calendar is in 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Daylight Savings Time. Recognizes DST_OFFSET, if it is set. 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status Fill-in parameter which receives the status of this operation. 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return True if the current date for this Calendar is in Daylight Savings Time, 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * false, otherwise. 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool inDaylightTime(UErrorCode& status) const; 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * override. This method is to implement a simple version of RTTI, since not all C++ 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this method. 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for this object. All objects of a given class have the 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * same class ID. Objects of other classes have different class IDs. 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UClassID getDynamicClassID(void) const; 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the class ID for this class. This is useful only for comparing to a return 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value from getDynamicClassID(). For example: 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Base* polymorphic_pointer = createPolymorphicObject(); 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if (polymorphic_pointer->getDynamicClassID() == 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Derived::getStaticClassID()) ... 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for all objects of this class. 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UClassID U_EXPORT2 getStaticClassID(void); 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the calendar type name string for this Calendar object. 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The returned string is the legacy ICU calendar attribute value, 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for example, "gregorian" or "japanese". 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For more details see the Calendar::getType() documentation. 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return legacy calendar type name string 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 49 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual const char * getType() const; 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar(); // default constructor not implemented 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected: 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the ERA. We need a special method for this because the 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * default ERA is AD, but a zero (unset) ERA is BC. 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the ERA. 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t internalGetEra() const; 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the Julian day number of day before the first day of the 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * given month in the given extended year. Subclasses should override 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this method to implement their calendar system. 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param eyear the extended year 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param month the zero-based month, or 0 if useMonth is false 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param useMonth if false, compute the day before the first day of 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the given year, otherwise, compute the day before the first day of 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the given month 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the Julian day number of the day before the first 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * day of the given month and year 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool useMonth) const; 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Subclasses may override this. This method calls 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * handleGetMonthLength() to obtain the calendar-specific month 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * length. 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param bestField which field to use to calculate the date 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return julian day specified by calendar fields. 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ; 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the number of days in the given month of the given extended 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * year of this calendar system. Subclasses should override this 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * method if they can provide a more correct or more efficient 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * implementation than the default implementation in Calendar. 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the number of days in the given extended year of this 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar system. Subclasses should override this method if they can 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * provide a more correct or more efficient implementation than the 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * default implementation in Calendar. 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetYearLength(int32_t eyear) const; 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return the length of the given month. 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param month the given month. 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the length of the given month. 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t monthLength(int32_t month) const; 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return the length of the month according to the given year. 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param month the given month. 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year the given year. 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the length of the month 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t monthLength(int32_t month, int32_t year) const; 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return the length of the given year. 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year the given year. 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the length of the given year. 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t yearLength(int32_t year) const; 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return the length of the year field. 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the length of the year field 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t yearLength(void) const; 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * After adjustments such as add(MONTH), add(YEAR), we don't want the 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * month to jump around. E.g., we don't want Jan 31 + 1 month to go to Mar 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 3, we want it to go to Feb 28. Adjustments which might run into this 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * problem call this method to retain the proper month. 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void pinDayOfMonth(void); 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_INTERNAL_API */ 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the day number with respect to the epoch. January 1, 1970 (Gregorian) 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is day zero. 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status Fill-in parameter which receives the status of this operation. 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the day number with respect to the epoch. 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UDate getEpochDay(UErrorCode& status); 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Subclass API for defining limits of different types. 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Subclasses must implement this method to return limits for the 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * following fields: 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>UCAL_ERA 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_YEAR 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_MONTH 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_WEEK_OF_YEAR 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_WEEK_OF_MONTH 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_DATE (DAY_OF_MONTH on Java) 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_DAY_OF_YEAR 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_DAY_OF_WEEK_IN_MONTH 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_YEAR_WOY 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCAL_EXTENDED_YEAR</pre> 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field one of the above field numbers 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>, 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code> 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the extended year defined by the current fields. This will 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as UCAL_ERA) specific to the calendar system, depending on which set of 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fields is newer. 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the extended year 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetExtendedYear(); 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Subclasses may override this to convert from week fields 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * where YEAR, EXTENDED_YEAR are not set. 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The Gregorian implementation assumes a yearWoy in gregorian format, according to the current era. 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the extended year, UCAL_EXTENDED_YEAR 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy); 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Subclasses may override this method to compute several fields 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * specific to each calendar system. These are: 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <ul><li>ERA 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>YEAR 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>MONTH 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>DAY_OF_MONTH 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>DAY_OF_YEAR 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>EXTENDED_YEAR</ul> 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The GregorianCalendar implementation implements 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a calendar with the specified Julian/Gregorian cutover date. 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compute the julian day number of the given year. 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param isGregorian if true, using Gregorian calendar, otherwise using Julian calendar 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param year the given year. 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param isLeap true if the year is a leap year. 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static double computeJulianDayOfYear(UBool isGregorian, int32_t year, 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool& isLeap); 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Validates the values of the set time fields. True if they're all valid. 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return True if the set time fields are all valid. 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool validateFields(void) const; 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Validates the value of the given time field. True if it's valid. 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool boundsCheck(int32_t value, UCalendarDateFields field) const; 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the pseudo-time-stamp for two fields, given their 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * individual pseudo-time-stamps. If either of the fields 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is unset, then the aggregate is unset. Otherwise, the 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * aggregate is the later of the two stamps. 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param stamp_a One given field. 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param stamp_b Another given field. 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the pseudo-time-stamp for two fields 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b); 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The point at which the Gregorian calendar rules are used, measured in 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * milliseconds from the standard epoch. Default is October 15, 1582 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Gregorian) 00:00:00 UTC, that is, October 4, 1582 (Julian) is followed 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * by October 15, 1582 (Gregorian). This corresponds to Julian day number 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2299161. This is measured from the standard epoch, not in Julian Days. 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate fGregorianCutover; 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Julian day number of the Gregorian cutover 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fCutoverJulianDay; 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Midnight, local time (using this Calendar's TimeZone) at or before the 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * gregorianCutover. This is a pure date value with no time of day or 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * timezone component. 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate fNormalizedGregorianCutover;// = gregorianCutover; 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The year of the gregorianCutover, with 0 representing 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1 BC, -1 representing 2 BC, etc. 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fGregorianCutoverYear;// = 1582; 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The year of the gregorianCutover, with 0 representing 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1 BC, -1 representing 2 BC, etc. 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fGregorianCutoverJulianDay;// = 2299161; 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Converts time as milliseconds to Julian date. The Julian date used here is not a 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * true Julian date, since it is measured from midnight, not noon. 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param millis The given milliseconds. 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The Julian date number. 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static double millisToJulianDay(UDate millis); 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Converts Julian date to time as milliseconds. The Julian date used here is not a 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * true Julian date, since it is measured from midnight, not noon. 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param julian The given Julian date number. 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return Time as milliseconds. 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UDate julianDayToMillis(double julian); 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Used by handleComputeJulianDay() and handleComputeMonthStart(). 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Temporary field indicating whether the calendar is currently Gregorian as opposed to Julian. 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fIsGregorian; 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Used by handleComputeJulianDay() and handleComputeMonthStart(). 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Temporary field indicating that the sense of the gregorian cutover should be inverted 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to handle certain calculations on and around the cutover date. 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fInvertGregorian; 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public: // internal implementation 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this calendar has the notion of a default century 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool haveDefaultCentury() const; 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the start of the default century 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UDate defaultCenturyStart() const; 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the beginning year of the default century 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t defaultCenturyStartYear() const; 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // _GREGOCAL 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 778