gregocal.h

00001 /*
00002 * Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved.
00003 ********************************************************************************
00004 *
00005 * File GREGOCAL.H
00006 *
00007 * Modification History:
00008 *
00009 *   Date        Name        Description
00010 *   04/22/97    aliu        Overhauled header.
00011 *    07/28/98    stephen        Sync with JDK 1.2
00012 *    09/04/98    stephen        Re-sync with JDK 8/31 putback
00013 *    09/14/98    stephen        Changed type of kOneDay, kOneWeek to double.
00014 *                            Fixed bug in roll()
00015 *   10/15/99    aliu        Fixed j31, incorrect WEEK_OF_YEAR computation.
00016 *                           Added documentation of WEEK_OF_YEAR computation.
00017 *   10/15/99    aliu        Fixed j32, cannot set date to Feb 29 2000 AD.
00018 *                           {JDK bug 4210209 4209272}
00019 *   11/07/2003  srl         Update, clean up documentation.
00020 ********************************************************************************
00021 */
00022 
00023 #ifndef GREGOCAL_H
00024 #define GREGOCAL_H
00025 
00026 #include "unicode/utypes.h"
00027 
00028 #if !UCONFIG_NO_FORMATTING
00029 
00030 #include "unicode/calendar.h"
00031 
00032 U_NAMESPACE_BEGIN
00033 
00143 class U_I18N_API GregorianCalendar: public Calendar {
00144 public:
00145 
00150     enum EEras {
00151         BC,
00152         AD
00153     };
00154 
00163     GregorianCalendar(UErrorCode& success);
00164 
00175     GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00176 
00186     GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00187 
00197     GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00198 
00210     GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00211 
00222     GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00223 
00236     GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00237 
00252     GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00253 
00269     GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00270 
00275     virtual ~GregorianCalendar();
00276 
00282     GregorianCalendar(const GregorianCalendar& source);
00283 
00289     GregorianCalendar& operator=(const GregorianCalendar& right);
00290 
00296     virtual Calendar* clone(void) const;
00297 
00307     void setGregorianChange(UDate date, UErrorCode& success);
00308 
00317     UDate getGregorianChange(void) const;
00318 
00334     UBool isLeapYear(int32_t year) const;
00335 
00343     virtual UBool isEquivalentTo(const Calendar& other) const;
00344 
00356     virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00357 
00369     virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00370 
00378     int32_t getActualMinimum(EDateFields field) const;
00379 
00388     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00389 
00398     int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00399 
00409     int32_t getActualMaximum(EDateFields field) const;
00410 
00421     virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00422 
00432     virtual UBool inDaylightTime(UErrorCode& status) const;
00433 
00434 public:
00435 
00446     virtual UClassID getDynamicClassID(void) const;
00447 
00459     static UClassID U_EXPORT2 getStaticClassID(void);
00460 
00467     virtual const char * getType() const;
00468 
00469 protected:
00470 
00477  private:
00478     GregorianCalendar(); // default constructor not implemented
00479 
00480  protected:
00487     virtual int32_t internalGetEra() const;
00488 
00502     virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00503                                                    UBool useMonth) const;
00504 
00513     virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)  ;
00514 
00522     virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00523 
00531     virtual int32_t handleGetYearLength(int32_t eyear) const;
00532 
00539     virtual int32_t monthLength(int32_t month) const;
00540 
00548     virtual int32_t monthLength(int32_t month, int32_t year) const;
00549     
00556     int32_t yearLength(int32_t year) const;
00557     
00563     int32_t yearLength(void) const;
00564 
00572     void pinDayOfMonth(void);
00573 
00581     virtual UDate getEpochDay(UErrorCode& status);
00582 
00604     virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00605 
00614     virtual int32_t handleGetExtendedYear();
00615 
00624     virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00625 
00626 
00642     virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00643 
00644  private:
00652     static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00653                                          UBool& isLeap);
00654     
00659     UBool validateFields(void) const;
00660 
00664     UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00665 
00675     int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00676 
00685     UDate                fGregorianCutover;
00686 
00690     int32_t             fCutoverJulianDay;
00691 
00697     UDate                 fNormalizedGregorianCutover;// = gregorianCutover;
00698 
00703     int32_t fGregorianCutoverYear;// = 1582;
00704 
00709     int32_t fGregorianCutoverJulianDay;// = 2299161;
00710 
00718     static double millisToJulianDay(UDate millis);
00719 
00727     static UDate julianDayToMillis(double julian);
00728 
00733     UBool fIsGregorian;
00734 
00740     UBool fInvertGregorian;
00741 
00742 
00743  public: // internal implementation
00744 
00749     virtual UBool haveDefaultCentury() const;
00750 
00755     virtual UDate defaultCenturyStart() const;
00756 
00761     virtual int32_t defaultCenturyStartYear() const;
00762 
00763  private:
00770     static UDate         fgSystemDefaultCenturyStart;
00771 
00775     static int32_t          fgSystemDefaultCenturyStartYear;
00776 
00780     static const int32_t    fgSystemDefaultCenturyYear;
00781 
00785     static const UDate        fgSystemDefaultCentury;
00786 
00793     UDate         internalGetDefaultCenturyStart(void) const;
00794 
00801     int32_t          internalGetDefaultCenturyStartYear(void) const;
00802 
00807     static void  initializeSystemDefaultCentury(void);
00808 
00809 };
00810 
00811 U_NAMESPACE_END
00812 
00813 #endif /* #if !UCONFIG_NO_FORMATTING */
00814 
00815 #endif // _GREGOCAL
00816 //eof
00817 

Generated on Tue Nov 16 10:03:05 2004 for ICU 3.2 by  doxygen 1.3.9.1