Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

gregocal.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (C) {1997-2003}, 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 
00387     int32_t getActualMinimum(UCalendarDateFields field) const;
00388 
00398     int32_t getActualMaximum(EDateFields field) const;
00399 
00409     virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00410 
00420     virtual UBool inDaylightTime(UErrorCode& status) const;
00421 
00422 public:
00423 
00434     virtual UClassID getDynamicClassID(void) const;
00435 
00447     static UClassID getStaticClassID(void);
00448 
00455     virtual const char * getType() const;
00456 
00457 protected:
00458 
00465  private:
00466     GregorianCalendar(); // default constructor not implemented
00467 
00468  protected:
00475     virtual int32_t internalGetEra() const;
00476 
00490     virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00491                                                    UBool useMonth) const;
00492 
00501     virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)  ;
00502 
00510     virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00511 
00519     virtual int32_t handleGetYearLength(int32_t eyear) const;
00520 
00527     virtual int32_t monthLength(int32_t month) const;
00528 
00536     virtual int32_t monthLength(int32_t month, int32_t year) const;
00537     
00544     int32_t yearLength(int32_t year) const;
00545     
00551     int32_t yearLength(void) const;
00552 
00560     void pinDayOfMonth(void);
00561 
00569     virtual UDate getEpochDay(UErrorCode& status);
00570 
00592     virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00593 
00602     virtual int32_t handleGetExtendedYear();
00603 
00611     virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00612 
00613 
00629     virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00630 
00631  private:
00639     static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00640                                          UBool& isLeap);
00641     
00646     UBool validateFields(void) const;
00647 
00651     UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00652 
00662     int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00663 
00672     UDate                fGregorianCutover;
00673 
00677     int32_t             fCutoverJulianDay;
00678 
00684     UDate                 fNormalizedGregorianCutover;// = gregorianCutover;
00685 
00690     int32_t fGregorianCutoverYear;// = 1582;
00691 
00696     int32_t fGregorianCutoverJulianDay;// = 2299161;
00697 
00705     static double millisToJulianDay(UDate millis);
00706 
00714     static UDate julianDayToMillis(double julian);
00715 
00720     UBool fIsGregorian;
00721 
00727     UBool fInvertGregorian;
00728 
00729 
00730  public: // internal implementation
00731 
00736     virtual UBool haveDefaultCentury() const;
00737 
00742     virtual UDate defaultCenturyStart() const;
00743 
00748     virtual int32_t defaultCenturyStartYear() const;
00749 
00750  private:
00757     static UDate         fgSystemDefaultCenturyStart;
00758 
00762     static int32_t          fgSystemDefaultCenturyStartYear;
00763 
00767     static const int32_t    fgSystemDefaultCenturyYear;
00768 
00772     static const UDate        fgSystemDefaultCentury;
00773 
00780     UDate         internalGetDefaultCenturyStart(void) const;
00781 
00788     int32_t          internalGetDefaultCenturyStartYear(void) const;
00789 
00794     static void  initializeSystemDefaultCentury(void);
00795 
00796 };
00797 
00798 U_NAMESPACE_END
00799 
00800 #endif /* #if !UCONFIG_NO_FORMATTING */
00801 
00802 #endif // _GREGOCAL
00803 //eof
00804 

Generated on Mon Nov 24 14:35:31 2003 for ICU 2.8 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001