gregocal.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (C) 1997-2012, 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 
00377 #ifndef U_HIDE_DEPRECATED_API
00378 
00385     int32_t getActualMinimum(EDateFields field) const;
00386 
00395     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00396 #endif  /* U_HIDE_DEPRECATED_API */
00397 
00406     int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00407 
00408 #ifndef U_HIDE_DEPRECATED_API
00409 
00418     int32_t getActualMaximum(EDateFields field) const;
00419 #endif  /* U_HIDE_DEPRECATED_API */
00420 
00431     virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00432 
00442     virtual UBool inDaylightTime(UErrorCode& status) const;
00443 
00444 public:
00445 
00456     virtual UClassID getDynamicClassID(void) const;
00457 
00469     static UClassID U_EXPORT2 getStaticClassID(void);
00470 
00471 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
00482     virtual const char * getType() const;
00483 
00484  private:
00485     GregorianCalendar(); // default constructor not implemented
00486 
00487  protected:
00494     virtual int32_t internalGetEra() const;
00495 
00509     virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00510                                                    UBool useMonth) const;
00511 
00520     virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)  ;
00521 
00529     virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00530 
00538     virtual int32_t handleGetYearLength(int32_t eyear) const;
00539 
00546     virtual int32_t monthLength(int32_t month) const;
00547 
00555     virtual int32_t monthLength(int32_t month, int32_t year) const;
00556 
00557 #ifndef U_HIDE_INTERNAL_API
00558 
00564     int32_t yearLength(int32_t year) const;
00565     
00571     int32_t yearLength(void) const;
00572 
00580     void pinDayOfMonth(void);
00581 #endif  /* U_HIDE_INTERNAL_API */
00582 
00590     virtual UDate getEpochDay(UErrorCode& status);
00591 
00613     virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00614 
00623     virtual int32_t handleGetExtendedYear();
00624 
00633     virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00634 
00635 
00651     virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00652 
00653  private:
00661     static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00662                                          UBool& isLeap);
00663     
00668     UBool validateFields(void) const;
00669 
00673     UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00674 
00684     int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00685 
00694     UDate                fGregorianCutover;
00695 
00699     int32_t             fCutoverJulianDay;
00700 
00706     UDate                 fNormalizedGregorianCutover;// = gregorianCutover;
00707 
00712     int32_t fGregorianCutoverYear;// = 1582;
00713 
00718     int32_t fGregorianCutoverJulianDay;// = 2299161;
00719 
00727     static double millisToJulianDay(UDate millis);
00728 
00736     static UDate julianDayToMillis(double julian);
00737 
00742     UBool fIsGregorian;
00743 
00749     UBool fInvertGregorian;
00750 
00751 
00752  public: // internal implementation
00753 
00758     virtual UBool haveDefaultCentury() const;
00759 
00764     virtual UDate defaultCenturyStart() const;
00765 
00770     virtual int32_t defaultCenturyStartYear() const;
00771 
00772  private:
00779     static UDate         fgSystemDefaultCenturyStart;
00780 
00784     static int32_t          fgSystemDefaultCenturyStartYear;
00785 
00789     static const int32_t    fgSystemDefaultCenturyYear;
00790 
00794     static const UDate        fgSystemDefaultCentury;
00795 
00802     UDate         internalGetDefaultCenturyStart(void) const;
00803 
00810     int32_t          internalGetDefaultCenturyStartYear(void) const;
00811 
00816     static void  initializeSystemDefaultCentury(void);
00817 
00818 };
00819 
00820 U_NAMESPACE_END
00821 
00822 #endif /* #if !UCONFIG_NO_FORMATTING */
00823 
00824 #endif // _GREGOCAL
00825 //eof
00826 

Generated on 27 Oct 2013 for ICU 50.1.2 by  doxygen 1.4.7