ICU 4.8.1.1  4.8.1.1
gregocal.h
Go to the documentation of this file.
00001 /*
00002 * Copyright (C) 1997-2011, International Business Machines Corporation and others.
00003 * All Rights Reserved.
00004 ********************************************************************************
00005 *
00006 * File GREGOCAL.H
00007 *
00008 * Modification History:
00009 *
00010 *   Date        Name        Description
00011 *   04/22/97    aliu        Overhauled header.
00012 *    07/28/98    stephen        Sync with JDK 1.2
00013 *    09/04/98    stephen        Re-sync with JDK 8/31 putback
00014 *    09/14/98    stephen        Changed type of kOneDay, kOneWeek to double.
00015 *                            Fixed bug in roll()
00016 *   10/15/99    aliu        Fixed j31, incorrect WEEK_OF_YEAR computation.
00017 *                           Added documentation of WEEK_OF_YEAR computation.
00018 *   10/15/99    aliu        Fixed j32, cannot set date to Feb 29 2000 AD.
00019 *                           {JDK bug 4210209 4209272}
00020 *   11/07/2003  srl         Update, clean up documentation.
00021 ********************************************************************************
00022 */
00023 
00024 #ifndef GREGOCAL_H
00025 #define GREGOCAL_H
00026 
00027 #include "unicode/utypes.h"
00028 
00029 #if !UCONFIG_NO_FORMATTING
00030 
00031 #include "unicode/calendar.h"
00032 
00038 U_NAMESPACE_BEGIN
00039 
00149 class U_I18N_API GregorianCalendar: public Calendar {
00150 public:
00151 
00156     enum EEras {
00157         BC,
00158         AD
00159     };
00160 
00169     GregorianCalendar(UErrorCode& success);
00170 
00181     GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00182 
00192     GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00193 
00203     GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00204 
00216     GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00217 
00228     GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00229 
00242     GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00243 
00258     GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00259 
00275     GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00276 
00281     virtual ~GregorianCalendar();
00282 
00288     GregorianCalendar(const GregorianCalendar& source);
00289 
00295     GregorianCalendar& operator=(const GregorianCalendar& right);
00296 
00302     virtual Calendar* clone(void) const;
00303 
00313     void setGregorianChange(UDate date, UErrorCode& success);
00314 
00323     UDate getGregorianChange(void) const;
00324 
00340     UBool isLeapYear(int32_t year) const;
00341 
00349     virtual UBool isEquivalentTo(const Calendar& other) const;
00350 
00362     virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00363 
00375     virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00376 
00384     int32_t getActualMinimum(EDateFields field) const;
00385 
00394     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00395 
00404     int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00405 
00415     int32_t getActualMaximum(EDateFields field) const;
00416 
00427     virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00428 
00438     virtual UBool inDaylightTime(UErrorCode& status) const;
00439 
00440 public:
00441 
00452     virtual UClassID getDynamicClassID(void) const;
00453 
00465     static UClassID U_EXPORT2 getStaticClassID(void);
00466 
00473     virtual const char * getType() const;
00474 
00475  private:
00476     GregorianCalendar(); // default constructor not implemented
00477 
00478  protected:
00485     virtual int32_t internalGetEra() const;
00486 
00500     virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00501                                                    UBool useMonth) const;
00502 
00511     virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)  ;
00512 
00520     virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00521 
00529     virtual int32_t handleGetYearLength(int32_t eyear) const;
00530 
00537     virtual int32_t monthLength(int32_t month) const;
00538 
00546     virtual int32_t monthLength(int32_t month, int32_t year) const;
00547     
00554     int32_t yearLength(int32_t year) const;
00555     
00561     int32_t yearLength(void) const;
00562 
00570     void pinDayOfMonth(void);
00571 
00579     virtual UDate getEpochDay(UErrorCode& status);
00580 
00602     virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00603 
00612     virtual int32_t handleGetExtendedYear();
00613 
00622     virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00623 
00624 
00640     virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00641 
00642  private:
00650     static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00651                                          UBool& isLeap);
00652     
00657     UBool validateFields(void) const;
00658 
00662     UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00663 
00673     int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00674 
00683     UDate                fGregorianCutover;
00684 
00688     int32_t             fCutoverJulianDay;
00689 
00695     UDate                 fNormalizedGregorianCutover;// = gregorianCutover;
00696 
00701     int32_t fGregorianCutoverYear;// = 1582;
00702 
00707     int32_t fGregorianCutoverJulianDay;// = 2299161;
00708 
00716     static double millisToJulianDay(UDate millis);
00717 
00725     static UDate julianDayToMillis(double julian);
00726 
00731     UBool fIsGregorian;
00732 
00738     UBool fInvertGregorian;
00739 
00740 
00741  public: // internal implementation
00742 
00747     virtual UBool haveDefaultCentury() const;
00748 
00753     virtual UDate defaultCenturyStart() const;
00754 
00759     virtual int32_t defaultCenturyStartYear() const;
00760 
00761  private:
00768     static UDate         fgSystemDefaultCenturyStart;
00769 
00773     static int32_t          fgSystemDefaultCenturyStartYear;
00774 
00778     static const int32_t    fgSystemDefaultCenturyYear;
00779 
00783     static const UDate        fgSystemDefaultCentury;
00784 
00791     UDate         internalGetDefaultCenturyStart(void) const;
00792 
00799     int32_t          internalGetDefaultCenturyStartYear(void) const;
00800 
00805     static void  initializeSystemDefaultCentury(void);
00806 
00807 };
00808 
00809 U_NAMESPACE_END
00810 
00811 #endif /* #if !UCONFIG_NO_FORMATTING */
00812 
00813 #endif // _GREGOCAL
00814 //eof
00815 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines