00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
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();
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;
00685
00690 int32_t fGregorianCutoverYear;
00691
00696 int32_t fGregorianCutoverJulianDay;
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:
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
00801
00802 #endif
00803
00804