ICU 69.1 69.1
gregocal.h
Go to the documentation of this file.
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4* Copyright (C) 1997-2013, International Business Machines Corporation and others.
5* All Rights Reserved.
6********************************************************************************
7*
8* File GREGOCAL.H
9*
10* Modification History:
11*
12* Date Name Description
13* 04/22/97 aliu Overhauled header.
14* 07/28/98 stephen Sync with JDK 1.2
15* 09/04/98 stephen Re-sync with JDK 8/31 putback
16* 09/14/98 stephen Changed type of kOneDay, kOneWeek to double.
17* Fixed bug in roll()
18* 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation.
19* Added documentation of WEEK_OF_YEAR computation.
20* 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD.
21* {JDK bug 4210209 4209272}
22* 11/07/2003 srl Update, clean up documentation.
23********************************************************************************
24*/
25
26#ifndef GREGOCAL_H
27#define GREGOCAL_H
28
29#include "unicode/utypes.h"
30
31#if U_SHOW_CPLUSPLUS_API
32
33#if !UCONFIG_NO_FORMATTING
34
35#include "unicode/calendar.h"
36
42U_NAMESPACE_BEGIN
43
154public:
155
160 enum EEras {
161 BC,
162 AD
163 };
164
174
185 GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
186
196 GregorianCalendar(const TimeZone& zone, UErrorCode& success);
197
207 GregorianCalendar(const Locale& aLocale, UErrorCode& success);
208
220 GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
221
232 GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
233
246 GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
247
262 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
263
279 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
280
286
293
300
306 virtual GregorianCalendar* clone() const;
307
317 void setGregorianChange(UDate date, UErrorCode& success);
318
328
344 UBool isLeapYear(int32_t year) const;
345
353 virtual UBool isEquivalentTo(const Calendar& other) const;
354
355#ifndef U_FORCE_HIDE_DEPRECATED_API
367 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
368#endif // U_FORCE_HIDE_DEPRECATED_API
369
381 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
382
383#ifndef U_HIDE_DEPRECATED_API
391 int32_t getActualMinimum(EDateFields field) const;
392
401 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
402#endif /* U_HIDE_DEPRECATED_API */
403
412 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
413
414#ifndef U_HIDE_DEPRECATED_API
424 int32_t getActualMaximum(EDateFields field) const;
425#endif /* U_HIDE_DEPRECATED_API */
426
437 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
438
448 virtual UBool inDaylightTime(UErrorCode& status) const;
449
450public:
451
462 virtual UClassID getDynamicClassID(void) const;
463
475 static UClassID U_EXPORT2 getStaticClassID(void);
476
487 virtual const char * getType() const;
488
489 private:
490 GregorianCalendar(); // default constructor not implemented
491
492 protected:
499 virtual int32_t internalGetEra() const;
500
514 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
515 UBool useMonth) const;
516
525 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
526
534 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
535
543 virtual int32_t handleGetYearLength(int32_t eyear) const;
544
551 virtual int32_t monthLength(int32_t month) const;
552
560 virtual int32_t monthLength(int32_t month, int32_t year) const;
561
562#ifndef U_HIDE_INTERNAL_API
569 int32_t yearLength(int32_t year) const;
570
576 int32_t yearLength(void) const;
577
585 void pinDayOfMonth(void);
586#endif /* U_HIDE_INTERNAL_API */
587
595 virtual UDate getEpochDay(UErrorCode& status);
596
618 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
619
628 virtual int32_t handleGetExtendedYear();
629
638 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
639
640
656 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
657
658 private:
666 static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
667 UBool& isLeap);
668
673 UBool validateFields(void) const;
674
678 UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
679
689 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
690
698 UDate fGregorianCutover;
699
703 int32_t fCutoverJulianDay;
704
710 UDate fNormalizedGregorianCutover;// = gregorianCutover;
711
716 int32_t fGregorianCutoverYear;// = 1582;
717
722 int32_t fGregorianCutoverJulianDay;// = 2299161;
723
731 static double millisToJulianDay(UDate millis);
732
740 static UDate julianDayToMillis(double julian);
741
746 UBool fIsGregorian;
747
753 UBool fInvertGregorian;
754
755
756 public: // internal implementation
757
762 virtual UBool haveDefaultCentury() const;
763
768 virtual UDate defaultCenturyStart() const;
769
774 virtual int32_t defaultCenturyStartYear() const;
775};
776
777U_NAMESPACE_END
778
779#endif /* #if !UCONFIG_NO_FORMATTING */
780
781#endif /* U_SHOW_CPLUSPLUS_API */
782
783#endif // _GREGOCAL
784//eof
785
C++ API: Calendar object.
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition calendar.h:189
EDateFields
Field IDs for date and time.
Definition calendar.h:198
ELimitType
Limit enums.
Definition calendar.h:1612
Concrete class which provides the standard calendar used by most of the world.
Definition gregocal.h:153
int32_t yearLength(int32_t year) const
return the length of the given year.
virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)
Subclasses may override this.
int32_t getActualMinimum(EDateFields field, UErrorCode &status) const
Return the minimum value that this field could have, given the current date.
GregorianCalendar(UErrorCode &success)
Constructs a default GregorianCalendar using the current time in the default time zone with the defau...
virtual UDate defaultCenturyStart() const
int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const
Return the minimum value that this field could have, given the current date.
virtual int32_t monthLength(int32_t month) const
return the length of the given month.
virtual UClassID getDynamicClassID(void) const
Override Calendar Returns a unique class ID POLYMORPHICALLY.
EEras
Useful constants for GregorianCalendar and TimeZone.
Definition gregocal.h:160
GregorianCalendar & operator=(const GregorianCalendar &right)
Default assignment operator.
GregorianCalendar(TimeZone *zoneToAdopt, UErrorCode &success)
Constructs a GregorianCalendar based on the current time in the given time zone with the default loca...
GregorianCalendar(const Locale &aLocale, UErrorCode &success)
Constructs a GregorianCalendar based on the current time in the default time zone with the given loca...
GregorianCalendar(const TimeZone &zone, const Locale &aLocale, UErrorCode &success)
Constructs a GregorianCalendar based on the current time in the given time zone with the given locale...
virtual int32_t monthLength(int32_t month, int32_t year) const
return the length of the month according to the given year.
GregorianCalendar(TimeZone *zoneToAdopt, const Locale &aLocale, UErrorCode &success)
Constructs a GregorianCalendar based on the current time in the given time zone with the given locale...
GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode &success)
Constructs a GregorianCalendar with the given AD date and time set for the default time zone with the...
void pinDayOfMonth(void)
After adjustments such as add(MONTH), add(YEAR), we don't want the month to jump around.
GregorianCalendar(const TimeZone &zone, UErrorCode &success)
Constructs a GregorianCalendar based on the current time in the given time zone with the default loca...
virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode &status)
(Overrides Calendar) Rolls up or down by the given amount in the specified field.
GregorianCalendar(const GregorianCalendar &source)
Copy constructor.
virtual int32_t handleGetYearLength(int32_t eyear) const
Return the number of days in the given extended year of this calendar system.
virtual UBool haveDefaultCentury() const
virtual int32_t internalGetEra() const
Return the ERA.
virtual int32_t defaultCenturyStartYear() const
virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const
Return the number of days in the given month of the given extended year of this calendar system.
virtual UBool isEquivalentTo(const Calendar &other) const
Returns true if the given Calendar object is equivalent to this one.
virtual GregorianCalendar * clone() const
Create and return a polymorphic copy of this calendar.
virtual int32_t handleGetExtendedYear()
Return the extended year defined by the current fields.
int32_t getActualMinimum(EDateFields field) const
Return the minimum value that this field could have, given the current date.
UBool isLeapYear(int32_t year) const
Return true if the given year is a leap year.
virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const
Subclass API for defining limits of different types.
virtual ~GregorianCalendar()
Destructor.
static UClassID getStaticClassID(void)
Return the class ID for this class.
virtual UBool inDaylightTime(UErrorCode &status) const
(Overrides Calendar) Return true if the current date for this Calendar is in Daylight Savings Time.
GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode &success)
Constructs a GregorianCalendar with the given AD date and time set for the default time zone with the...
virtual UDate getEpochDay(UErrorCode &status)
Return the day number with respect to the epoch.
virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy)
Subclasses may override this to convert from week fields (YEAR_WOY and WEEK_OF_YEAR) to an extended y...
virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode &status) const
Return the maximum value that this field could have, given the current date.
int32_t yearLength(void) const
return the length of the year field.
virtual void roll(EDateFields field, int32_t amount, UErrorCode &status)
(Overrides Calendar) Rolls up or down by the given amount in the specified field.
virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const
Return the Julian day number of day before the first day of the given month in the given extended yea...
GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode &success)
Constructs a GregorianCalendar with the given AD date set in the default time zone with the default l...
UDate getGregorianChange(void) const
Gets the Gregorian Calendar change date.
void setGregorianChange(UDate date, UErrorCode &success)
Sets the GregorianCalendar change date.
virtual const char * getType() const
Returns the calendar type name string for this Calendar object.
virtual void handleComputeFields(int32_t julianDay, UErrorCode &status)
Subclasses may override this method to compute several fields specific to each calendar system.
int32_t getActualMaximum(EDateFields field) const
Return the maximum value that this field could have, given the current date.
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:195
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition timezone.h:133
UCalendarDateFields
Possible fields in a UCalendar.
Definition ucal.h:202
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition umachine.h:269
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:96
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition utypes.h:415
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:301
double UDate
Date and Time data type.
Definition utypes.h:203