#include <gregocal.h>
Inheritance diagram for GregorianCalendar::
Public Types | |
enum | EEras { BC, AD } |
Useful constants for GregorianCalendar and TimeZone. More... | |
Public Methods | |
GregorianCalendar (UErrorCode &success) | |
Constructs a default GregorianCalendar using the current time in the default time zone with the default locale. More... | |
GregorianCalendar (TimeZone *zoneToAdopt, UErrorCode &success) | |
Constructs a GregorianCalendar based on the current time in the given time zone with the default locale. More... | |
GregorianCalendar (const TimeZone &zone, UErrorCode &success) | |
Constructs a GregorianCalendar based on the current time in the given time zone with the default locale. More... | |
GregorianCalendar (const Locale &aLocale, UErrorCode &success) | |
Constructs a GregorianCalendar based on the current time in the default time zone with the given locale. More... | |
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. More... | |
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. More... | |
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 locale. More... | |
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 default locale. More... | |
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 default locale. More... | |
virtual | ~GregorianCalendar () |
Destructor. More... | |
GregorianCalendar (const GregorianCalendar &source) | |
Copy constructor. More... | |
GregorianCalendar & | operator= (const GregorianCalendar &right) |
Default assignment operator. More... | |
virtual Calendar * | clone (void) const |
Create and return a polymorphic copy of this calendar. More... | |
void | setGregorianChange (UDate date, UErrorCode &success) |
Sets the GregorianCalendar change date. More... | |
UDate | getGregorianChange (void) const |
Gets the Gregorian Calendar change date. More... | |
UBool | isLeapYear (int32_t year) const |
Return true if the given year is a leap year. More... | |
virtual UBool | isEquivalentTo (const Calendar &other) const |
Returns TRUE if the given Calendar object is equivalent to this one. More... | |
virtual void | add (EDateFields field, int32_t amount, UErrorCode &status) |
(Overrides Calendar) UDate Arithmetic function. More... | |
virtual void | roll (EDateFields field, int32_t amount, UErrorCode &status) |
(Overrides Calendar) Rolls up or down by the given amount in the specified field. More... | |
virtual int32_t | getMinimum (EDateFields field) const |
(Overrides Calendar) Returns minimum value for the given field. More... | |
virtual int32_t | getMaximum (EDateFields field) const |
(Overrides Calendar) Returns maximum value for the given field. More... | |
virtual int32_t | getGreatestMinimum (EDateFields field) const |
(Overrides Calendar) Returns highest minimum value for the given field if varies. More... | |
virtual int32_t | getLeastMaximum (EDateFields field) const |
(Overrides Calendar) Returns lowest maximum value for the given field if varies. More... | |
int32_t | getActualMinimum (EDateFields field) const |
Return the minimum value that this field could have, given the current date. More... | |
int32_t | getActualMaximum (EDateFields field) const |
Return the maximum value that this field could have, given the current date. More... | |
virtual UBool | inDaylightTime (UErrorCode &status) const |
(Overrides Calendar) Return true if the current date for this Calendar is in Daylight Savings Time. More... | |
virtual UClassID | getDynamicClassID (void) const |
Override Calendar Returns a unique class ID POLYMORPHICALLY. More... | |
Static Public Methods | |
UClassID | getStaticClassID (void) |
Return the class ID for this class. More... | |
Protected Methods | |
virtual void | computeFields (UErrorCode &status) |
(Overrides Calendar) Converts GMT as milliseconds to time field values. More... | |
virtual void | computeTime (UErrorCode &status) |
(Overrides Calendar) Converts Calendar's time field values to GMT as milliseconds. More... | |
Private Methods | |
int32_t | internalGetEra () const |
Return the ERA. More... | |
int32_t | monthLength (int32_t month) const |
return the length of the given month. More... | |
int32_t | monthLength (int32_t month, int32_t year) const |
return the length of the month according to the given year. More... | |
int32_t | yearLength (int32_t year) const |
return the length of the given year. More... | |
int32_t | yearLength (void) const |
return the length of the year field. More... | |
void | pinDayOfMonth (void) |
After adjustments such as add(MONTH), add(YEAR), we don't want the month to jump around. More... | |
UDate | getEpochDay (UErrorCode &status) |
Return the day number with respect to the epoch. More... | |
int32_t | computeRelativeDOW () const |
Compute the day of week, relative to the first day of week, from 0..6, of the current DOW_LOCAL or DAY_OF_WEEK fields. More... | |
int32_t | computeRelativeDOW (double julianDay) const |
Compute the day of week, relative to the first day of week, from 0..6 of the given julian day. More... | |
int32_t | computeDOYfromWOY (double julianDayOfYear) const |
Compute the DOY using the WEEK_OF_YEAR field and the julian day of the day BEFORE January 1 of a year (a return value from computeJulianDayOfYear). More... | |
double | computeJulianDay (UBool isGregorian, int32_t year) |
Compute the Julian day number under either the Gregorian or the Julian calendar, using the given year and the remaining fields. More... | |
void | timeToFields (UDate theTime, UBool quick, UErrorCode &status) |
Compute the date-based fields given the milliseconds since the epoch start. More... | |
int32_t | weekNumber (int32_t date, int32_t day) |
Return the week number of a day, within a period. More... | |
UBool | validateFields (void) const |
Validates the values of the set time fields. More... | |
UBool | boundsCheck (int32_t value, EDateFields field) const |
Validates the value of the given time field. More... | |
int32_t | aggregateStamp (int32_t stamp_a, int32_t stamp_b) |
Return the pseudo-time-stamp for two fields, given their individual pseudo-time-stamps. More... | |
Static Private Methods | |
double | computeJulianDayOfYear (UBool isGregorian, int32_t year, UBool &isLeap) |
Compute the julian day number of the given year. More... | |
double | millisToJulianDay (UDate millis) |
Converts time as milliseconds to Julian date. More... | |
UDate | julianDayToMillis (double julian) |
Converts Julian date to time as milliseconds. More... | |
uint8_t | julianDayToDayOfWeek (double julian) |
Convert a quasi Julian date to the day of the week. More... | |
double | floorDivide (double numerator, double denominator) |
Divide two long integers, returning the floor of the quotient. More... | |
int32_t | floorDivide (int32_t numerator, int32_t denominator) |
Divide two integers, returning the floor of the quotient. More... | |
int32_t | floorDivide (int32_t numerator, int32_t denominator, int32_t remainder[]) |
Divide two integers, returning the floor of the quotient, and the modulus remainder. More... | |
int32_t | floorDivide (double numerator, int32_t denominator, int32_t remainder[]) |
Divide two integers, returning the floor of the quotient, and the modulus remainder. More... | |
Private Attributes | |
UDate | fGregorianCutover |
The point at which the Gregorian calendar rules are used, measured in milliseconds from the standard epoch. More... | |
UDate | fNormalizedGregorianCutover |
Midnight, local time (using this Calendar's TimeZone) at or before the gregorianCutover. More... | |
int32_t | fGregorianCutoverYear |
The year of the gregorianCutover, with 0 representing 1 BC, -1 representing 2 BC, etc. More... | |
Static Private Attributes | |
const char | fgClassID |
The standard (Gregorian) calendar has 2 eras, BC and AD.
This implementation handles a single discontinuity, which corresponds by default to the date the Gregorian calendar was originally instituted (October 15, 1582). Not all countries adopted the Gregorian calendar then, so this cutover date may be changed by the caller.
Prior to the institution of the Gregorian Calendar, New Year's Day was March 25. To avoid confusion, this Calendar always uses January 1. A manual adjustment may be made if desired for dates that are prior to the Gregorian changeover and which fall between January 1 and March 24.
Values calculated for the WEEK_OF_YEAR
field range from 1 to 53. Week 1 for a year is the first week that contains at least getMinimalDaysInFirstWeek()
days from that year. It thus depends on the values of getMinimalDaysInFirstWeek()
, getFirstDayOfWeek()
, and the day of the week of January 1. Weeks between week 1 of one year and week 1 of the following year are numbered sequentially from 2 to 52 or 53 (as needed).
For example, January 1, 1998 was a Thursday. If getFirstDayOfWeek()
is MONDAY
and getMinimalDaysInFirstWeek()
is 4 (these are the values reflecting ISO 8601 and many national standards), then week 1 of 1998 starts on December 29, 1997, and ends on January 4, 1998. If, however, getFirstDayOfWeek()
is SUNDAY
, then week 1 of 1998 starts on January 4, 1998, and ends on January 10, 1998; the first three days of 1998 then are part of week 53 of 1997.
Example for using GregorianCalendar:
// get the supported ids for GMT-08:00 (Pacific Standard Time) int32_t idsCount; const UnicodeString** ids = TimeZone::createAvailableIDs(-8 * 60 * 60 * 1000, idsCount); // if no ids were returned, something is wrong. get out. if (idsCount == 0) { return; } // begin output cout << "Current Time" << endl; // create a Pacific Standard Time time zone SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, *(ids[0])); // set up rules for daylight savings time pdt->setStartRule(Calendar::APRIL, 1, Calendar::SUNDAY, 2 * 60 * 60 * 1000); pdt->setEndRule(Calendar::OCTOBER, -1, Calendar::SUNDAY, 2 * 60 * 60 * 1000); // create a GregorianCalendar with the Pacific Daylight time zone // and the current date and time UErrorCode success = U_ZERO_ERROR; Calendar* calendar = new GregorianCalendar( pdt, success ); // print out a bunch of interesting things cout << "ERA: " << calendar->get( Calendar::ERA, success ) << endl; cout << "YEAR: " << calendar->get( Calendar::YEAR, success ) << endl; cout << "MONTH: " << calendar->get( Calendar::MONTH, success ) << endl; cout << "WEEK_OF_YEAR: " << calendar->get( Calendar::WEEK_OF_YEAR, success ) << endl; cout << "WEEK_OF_MONTH: " << calendar->get( Calendar::WEEK_OF_MONTH, success ) << endl; cout << "DATE: " << calendar->get( Calendar::DATE, success ) << endl; cout << "DAY_OF_MONTH: " << calendar->get( Calendar::DAY_OF_MONTH, success ) << endl; cout << "DAY_OF_YEAR: " << calendar->get( Calendar::DAY_OF_YEAR, success ) << endl; cout << "DAY_OF_WEEK: " << calendar->get( Calendar::DAY_OF_WEEK, success ) << endl; cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( Calendar::DAY_OF_WEEK_IN_MONTH, success ) << endl; cout << "AM_PM: " << calendar->get( Calendar::AM_PM, success ) << endl; cout << "HOUR: " << calendar->get( Calendar::HOUR, success ) << endl; cout << "HOUR_OF_DAY: " << calendar->get( Calendar::HOUR_OF_DAY, success ) << endl; cout << "MINUTE: " << calendar->get( Calendar::MINUTE, success ) << endl; cout << "SECOND: " << calendar->get( Calendar::SECOND, success ) << endl; cout << "MILLISECOND: " << calendar->get( Calendar::MILLISECOND, success ) << endl; cout << "ZONE_OFFSET: " << (calendar->get( Calendar::ZONE_OFFSET, success )/(60*60*1000)) << endl; cout << "DST_OFFSET: " << (calendar->get( Calendar::DST_OFFSET, success )/(60*60*1000)) << endl; cout << "Current Time, with hour reset to 3" << endl; calendar->clear(Calendar::HOUR_OF_DAY); // so doesn't override calendar->set(Calendar::HOUR, 3); cout << "ERA: " << calendar->get( Calendar::ERA, success ) << endl; cout << "YEAR: " << calendar->get( Calendar::YEAR, success ) << endl; cout << "MONTH: " << calendar->get( Calendar::MONTH, success ) << endl; cout << "WEEK_OF_YEAR: " << calendar->get( Calendar::WEEK_OF_YEAR, success ) << endl; cout << "WEEK_OF_MONTH: " << calendar->get( Calendar::WEEK_OF_MONTH, success ) << endl; cout << "DATE: " << calendar->get( Calendar::DATE, success ) << endl; cout << "DAY_OF_MONTH: " << calendar->get( Calendar::DAY_OF_MONTH, success ) << endl; cout << "DAY_OF_YEAR: " << calendar->get( Calendar::DAY_OF_YEAR, success ) << endl; cout << "DAY_OF_WEEK: " << calendar->get( Calendar::DAY_OF_WEEK, success ) << endl; cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( Calendar::DAY_OF_WEEK_IN_MONTH, success ) << endl; cout << "AM_PM: " << calendar->get( Calendar::AM_PM, success ) << endl; cout << "HOUR: " << calendar->get( Calendar::HOUR, success ) << endl; cout << "HOUR_OF_DAY: " << calendar->get( Calendar::HOUR_OF_DAY, success ) << endl; cout << "MINUTE: " << calendar->get( Calendar::MINUTE, success ) << endl; cout << "SECOND: " << calendar->get( Calendar::SECOND, success ) << endl; cout << "MILLISECOND: " << calendar->get( Calendar::MILLISECOND, success ) << endl; cout << "ZONE_OFFSET: " << (calendar->get( Calendar::ZONE_OFFSET, success )/(60*60*1000)) << endl; // in hours cout << "DST_OFFSET: " << (calendar->get( Calendar::DST_OFFSET, success )/(60*60*1000)) << endl; // in hours delete[] ids; delete calendar; // also deletes pdt
Definition at line 139 of file gregocal.h.
|
Useful constants for GregorianCalendar and TimeZone.
Definition at line 146 of file gregocal.h. |
|
Constructs a default GregorianCalendar using the current time in the default time zone with the default locale.
|
|
Constructs a GregorianCalendar based on the current time in the given time zone with the default locale. Clients are no longer responsible for deleting the given time zone object after it's adopted.
|
|
Constructs a GregorianCalendar based on the current time in the given time zone with the default locale.
|
|
Constructs a GregorianCalendar based on the current time in the default time zone with the given locale.
|
|
Constructs a GregorianCalendar based on the current time in the given time zone with the given locale. Clients are no longer responsible for deleting the given time zone object after it's adopted.
|
|
Constructs a GregorianCalendar based on the current time in the given time zone with the given locale.
|
|
Constructs a GregorianCalendar with the given AD date set in the default time zone with the default locale.
|
|
Constructs a GregorianCalendar with the given AD date and time set for the default time zone with the default locale.
|
|
Constructs a GregorianCalendar with the given AD date and time set for the default time zone with the default locale.
|
|
Destructor.
|
|
Copy constructor.
|
|
(Overrides Calendar) UDate Arithmetic function. Adds the specified (signed) amount of time to the given time field, based on the calendar's rules. For more information, see the documentation for Calendar::add().
Reimplemented from Calendar. |
|
Return the pseudo-time-stamp for two fields, given their individual pseudo-time-stamps. If either of the fields is unset, then the aggregate is unset. Otherwise, the aggregate is the later of the two stamps.
|
|
Validates the value of the given time field. True if it's valid. |
|
Create and return a polymorphic copy of this calendar.
Reimplemented from Calendar. |
|
Compute the DOY using the WEEK_OF_YEAR field and the julian day of the day BEFORE January 1 of a year (a return value from computeJulianDayOfYear).
|
|
(Overrides Calendar) Converts GMT as milliseconds to time field values.
Reimplemented from Calendar. |
|
Compute the Julian day number under either the Gregorian or the Julian calendar, using the given year and the remaining fields.
|
|
Compute the julian day number of the given year.
|
|
Compute the day of week, relative to the first day of week, from 0..6 of the given julian day.
|
|
Compute the day of week, relative to the first day of week, from 0..6, of the current DOW_LOCAL or DAY_OF_WEEK fields. This is equivalent to get(DOW_LOCAL) - 1.
|
|
(Overrides Calendar) Converts Calendar's time field values to GMT as milliseconds.
Reimplemented from Calendar. |
|
Divide two integers, returning the floor of the quotient, and the modulus remainder.
Unlike the built-in division, this is mathematically well-behaved. E.g.,
|
|
Divide two integers, returning the floor of the quotient, and the modulus remainder.
Unlike the built-in division, this is mathematically well-behaved. E.g.,
|
|
Divide two integers, returning the floor of the quotient.
Unlike the built-in division, this is mathematically well-behaved. E.g.,
|
|
Divide two long integers, returning the floor of the quotient.
Unlike the built-in division, this is mathematically well-behaved. E.g.,
|
|
Return the maximum value that this field could have, given the current date. For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual maximum would be 28; for "Feb 3, 1996" it s 29. Similarly for a Hebrew calendar, for some years the actual maximum for MONTH is 12, and for others 13.
|
|
Return the minimum value that this field could have, given the current date. For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
|
|
Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This method is to implement a simple version of RTTI, since not all C++ compilers support genuine RTTI. Polymorphic operator==() and clone() methods call this method.
Reimplemented from Calendar. Definition at line 449 of file gregocal.h. |
|
Return the day number with respect to the epoch. January 1, 1970 (Gregorian) is day zero.
|
|
(Overrides Calendar) Returns highest minimum value for the given field if varies. Otherwise same as getMinimum(). For Gregorian, no difference.
Reimplemented from Calendar. |
|
Gets the Gregorian Calendar change date. This is the point when the switch from Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October 15, 1582. Previous to this time and date will be Julian dates.
|
|
(Overrides Calendar) Returns lowest maximum value for the given field if varies. Otherwise same as getMaximum(). For Gregorian DAY_OF_MONTH, 28.
Reimplemented from Calendar. |
|
(Overrides Calendar) Returns maximum value for the given field. e.g. for Gregorian DAY_OF_MONTH, 31.
Reimplemented from Calendar. |
|
(Overrides Calendar) Returns minimum value for the given field. e.g. for Gregorian DAY_OF_MONTH, 1.
Reimplemented from Calendar. |
|
Return the class ID for this class. This is useful only for comparing to a return value from getDynamicClassID(). For example: Base* polymorphic_pointer = createPolymorphicObject(); if (polymorphic_pointer->getDynamicClassID() == Derived::getStaticClassID()) ...
Definition at line 462 of file gregocal.h. |
|
(Overrides Calendar) Return true if the current date for this Calendar is in Daylight Savings Time. Recognizes DST_OFFSET, if it is set.
Reimplemented from Calendar. |
|
Return the ERA. We need a special method for this because the default ERA is AD, but a zero (unset) ERA is BC.
|
|
Returns TRUE if the given Calendar object is equivalent to this one. Calendar override.
Reimplemented from Calendar. |
|
Return true if the given year is a leap year. Determination of whether a year is a leap year is actually very complicated. We do something crude and mostly correct here, but for a real determination you need a lot of contextual information. For example, in Sweden, the change from Julian to Gregorian happened in a complex way resulting in missed leap years and double leap years between 1700 and 1753. Another example is that after the start of the Julian calendar in 45 B.C., the leap years did not regularize until 8 A.D. This method ignores these quirks, and pays attention only to the Julian onset date and the Gregorian cutover (which can be changed).
|
|
Convert a quasi Julian date to the day of the week. The Julian date used here is not a true Julian date, since it is measured from midnight, not noon. Return value is one-based.
Definition at line 746 of file gregocal.h. |
|
Converts Julian date to time as milliseconds. The Julian date used here is not a true Julian date, since it is measured from midnight, not noon.
|
|
Converts time as milliseconds to Julian date. The Julian date used here is not a true Julian date, since it is measured from midnight, not noon.
|
|
return the length of the month according to the given year.
|
|
return the length of the given month.
|
|
Default assignment operator.
|
|
After adjustments such as add(MONTH), add(YEAR), we don't want the month to jump around. E.g., we don't want Jan 31 + 1 month to go to Mar 3, we want it to go to Feb 28. Adjustments which might run into this problem call this method to retain the proper month. |
|
(Overrides Calendar) Rolls up or down by the given amount in the specified field. For more information, see the documentation for Calendar::roll().
Reimplemented from Calendar. |
|
Sets the GregorianCalendar change date. This is the point when the switch from Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October 15, 1582. Previous to this time and date will be Julian dates.
|
|
Compute the date-based fields given the milliseconds since the epoch start. Do not compute the time-based fields (HOUR, MINUTE, etc.).
|
|
Validates the values of the set time fields. True if they're all valid.
|
|
Return the week number of a day, within a period. This may be the week number in a year, or the week number in a month. Usually this will be a value >= 1, but if some initial days of the period are excluded from week 1, because minimalDaysInFirstWeek is > 1, then the week number will be zero for those initial days. Requires the day of week for the given date in order to determine the day of week of the first day of the period.
|
|
return the length of the year field.
|
|
return the length of the given year.
|
|
The point at which the Gregorian calendar rules are used, measured in milliseconds from the standard epoch. Default is October 15, 1582 (Gregorian) 00:00:00 UTC, that is, October 4, 1582 (Julian) is followed by October 15, 1582 (Gregorian). This corresponds to Julian day number 2299161. Definition at line 642 of file gregocal.h. |
|
The year of the gregorianCutover, with 0 representing 1 BC, -1 representing 2 BC, etc.
Definition at line 655 of file gregocal.h. |
|
Midnight, local time (using this Calendar's TimeZone) at or before the gregorianCutover. This is a pure date value with no time of day or timezone component. Definition at line 649 of file gregocal.h. |
|
Definition at line 657 of file gregocal.h. |