class Calendar

Defined at line 190 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

`Calendar` is an abstract base class for converting between

a `UDate` object and a set of integer fields such as

`YEAR`, `MONTH`, `DAY`, `HOUR`, and so on.

(A `UDate` object represents a specific instant in

time with millisecond precision. See UDate

for information about the `UDate` class.)

Subclasses of `Calendar` interpret a `UDate`

according to the rules of a specific calendar system.

The most commonly used subclass of `Calendar` is

`GregorianCalendar`. Other subclasses could represent

the various types of lunar calendars in use in many parts of the world.

**NOTE**: (ICU 2.6) The subclass interface should be considered unstable -

it WILL change.

Like other locale-sensitive classes, `Calendar` provides a

static method, `createInstance`, for getting a generally useful

object of this type. `Calendar`'s `createInstance` method

returns the appropriate `Calendar` subclass whose

time fields have been initialized with the current date and time:

Calendar *rightNow = Calendar::createInstance(errCode);

A `Calendar` object can produce all the time field values

needed to implement the date-time formatting for a particular language

and calendar style (for example, Japanese-Gregorian, Japanese-Traditional).

When computing a `UDate` from time fields, some special circumstances

may arise: there may be insufficient information to compute the

`UDate` (such as only year and month but no day in the month),

there may be inconsistent information (such as "Tuesday, July 15, 1996"

-- July 15, 1996 is actually a Monday), or the input time might be ambiguous

because of time zone transition.

**Insufficient information.** The calendar will use default

information to specify the missing fields. This may vary by calendar; for

the Gregorian calendar, the default for a field is the same as that of the

start of the epoch: i.e., YEAR = 1970, MONTH = JANUARY, DATE = 1, etc.

**Inconsistent information.** If fields conflict, the calendar

will give preference to fields set more recently. For example, when

determining the day, the calendar will look for one of the following

combinations of fields. The most recent combination, as determined by the

most recently set single field, will be used.

MONTH + DAY_OF_MONTH

MONTH + WEEK_OF_MONTH + DAY_OF_WEEK

MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK

DAY_OF_YEAR

DAY_OF_WEEK + WEEK_OF_YEAR

For the time of day:

HOUR_OF_DAY

AM_PM + HOUR

**Ambiguous Wall Clock Time.** When time offset from UTC has

changed, it produces an ambiguous time slot around the transition. For example,

many US locations observe daylight saving time. On the date switching to daylight

saving time in US, wall clock time jumps from 12:59 AM (standard) to 2:00 AM

(daylight). Therefore, wall clock time from 1:00 AM to 1:59 AM do not exist on

the date. When the input wall time fall into this missing time slot, the ICU

Calendar resolves the time using the UTC offset before the transition by default.

In this example, 1:30 AM is interpreted as 1:30 AM standard time (non-exist),

so the final result will be 2:30 AM daylight time.

On the date switching back to standard time, wall clock time is moved back one

hour at 2:00 AM. So wall clock time from 1:00 AM to 1:59 AM occur twice. In this

case, the ICU Calendar resolves the time using the UTC offset after the transition

by default. For example, 1:30 AM on the date is resolved as 1:30 AM standard time.

Ambiguous wall clock time resolution behaviors can be customized by Calendar APIs

{

Protected Members

int32_t[24] fFields
static const int32_t kResolveSTOP
static const int32_t kResolveRemap
static const UFieldResolutionTable[] kDatePrecedence
static const UFieldResolutionTable[] kYearPrecedence
static const UFieldResolutionTable[] kDOWPrecedence
static const UFieldResolutionTable[] kMonthPrecedence

Public Methods

Calendar * clone ()

Create and return a polymorphic copy of this calendar.

Returns

a polymorphic copy of this calendar.

ICU 2.0

Calendar * createInstance (UErrorCode & success)

Creates a Calendar using the default timezone and locale. Clients are responsible

for deleting the object returned.

Parameters

success Indicates the success/failure of Calendar creation. Filled in with U_ZERO_ERROR if created successfully, set to a failure result otherwise. U_MISSING_RESOURCE_ERROR will be returned if the resource data requests a calendar type which has not been installed.

Returns

A Calendar if created successfully. nullptr otherwise.

ICU 2.0

Calendar * createInstance (const TimeZone & zone, UErrorCode & success)

Creates a Calendar using the given timezone and the default locale. The TimeZone

is _not_ adopted; the client is still responsible for deleting it.

Parameters

zone The timezone.
success Indicates the success/failure of Calendar creation. Filled in with U_ZERO_ERROR if created successfully, set to a failure result otherwise.

Returns

A Calendar if created successfully. nullptr otherwise.

ICU 2.0

Calendar * createInstance (const Locale & aLocale, UErrorCode & success)

Creates a Calendar using the default timezone and the given locale.

Parameters

aLocale The given locale.
success Indicates the success/failure of Calendar creation. Filled in with U_ZERO_ERROR if created successfully, set to a failure result otherwise.

Returns

A Calendar if created successfully. nullptr otherwise.

ICU 2.0

Calendar * createInstance (TimeZone * zoneToAdopt, const Locale & aLocale, UErrorCode & success)

Creates a Calendar using the given timezone and given locale.

The Calendar takes ownership of zoneToAdopt; the

client must not delete it.

Parameters

zoneToAdopt The given timezone to be adopted.
aLocale The given locale.
success Indicates the success/failure of Calendar creation. Filled in with U_ZERO_ERROR if created successfully, set to a failure result otherwise.

Returns

A Calendar if created successfully. nullptr otherwise.

ICU 2.0

Calendar * createInstance (const TimeZone & zone, const Locale & aLocale, UErrorCode & success)

Gets a Calendar using the given timezone and given locale. The TimeZone

is _not_ adopted; the client is still responsible for deleting it.

Parameters

zone The given timezone.
aLocale The given locale.
success Indicates the success/failure of Calendar creation. Filled in with U_ZERO_ERROR if created successfully, set to a failure result otherwise.

Returns

A Calendar if created successfully. nullptr otherwise.

ICU 2.0

const Locale * getAvailableLocales (int32_t & count)

Returns a list of the locales for which Calendars are installed.

Parameters

count Number of locales returned.

Returns

An array of Locale objects representing the set of locales for which

Calendars are installed. The system retains ownership of this list;

the caller must NOT delete it. Does not include user-registered Calendars.

ICU 2.0

StringEnumeration * getKeywordValuesForLocale (const char * key, const Locale & locale, UBool commonlyUsed, UErrorCode & status)

Given a key and a locale, returns an array of string values in a preferred

order that would make a difference. These are all and only those values where

the open (creation) of the service with the locale formed from the input locale

plus input keyword and that value has different behavior than creation with the

input locale alone.

Parameters

key one of the keys supported by this service. For now, only "calendar" is supported.
locale the locale
commonlyUsed if set to true it will return only commonly used values with the given locale in preferred order. Otherwise, it will return all the available values for the locale.
status ICU Error Code

Returns

a string enumeration over keyword values for the given key and the locale.

ICU 4.2

UDate getNow ()

Returns the current UTC (GMT) time measured in milliseconds since 0:00:00 on 1/1/70

(derived from the system time).

Returns

The current UTC time in milliseconds.

ICU 2.0

UBool equals (const Calendar & when, UErrorCode & status)

Compares the Calendar time, whereas Calendar::operator== compares the equality of

Calendar objects.

Parameters

when The Calendar to be compared with this Calendar. Although this is a const parameter, the object may be modified physically (semantically const).
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status.

Returns

True if the current time of this Calendar is equal to the time of

Calendar when; false otherwise.

ICU 2.0

UBool before (const Calendar & when, UErrorCode & status)

Returns true if this Calendar's current time is before "when"'s current time.

Parameters

when The Calendar to be compared with this Calendar. Although this is a const parameter, the object may be modified physically (semantically const).
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status.

Returns

True if the current time of this Calendar is before the time of

Calendar when; false otherwise.

ICU 2.0

UBool after (const Calendar & when, UErrorCode & status)

Returns true if this Calendar's current time is after "when"'s current time.

Parameters

when The Calendar to be compared with this Calendar. Although this is a const parameter, the object may be modified physically (semantically const).
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status.

Returns

True if the current time of this Calendar is after the time of

Calendar when; false otherwise.

ICU 2.0

void add (EDateFields field, int32_t amount, UErrorCode & status)

UDate Arithmetic function. Adds the specified (signed) amount of time to the given

time field, based on the calendar's rules. For example, to subtract 5 days from

the current time of the calendar, call add(Calendar::DATE, -5). When adding on

the month or Calendar::MONTH field, other fields like date might conflict and

need to be changed. For instance, adding 1 month on the date 01/31/96 will result

in 02/29/96.

Adding a positive value always means moving forward in time, so for the Gregorian calendar,

starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces

the numeric value of the field itself).

Parameters

field Specifies which date field to modify.
amount The amount of time to be added to the field, in the natural unit for that field (e.g., days for the day fields, hours for the hour field.)
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status.
void add (UCalendarDateFields field, int32_t amount, UErrorCode & status)

UDate Arithmetic function. Adds the specified (signed) amount of time to the given

time field, based on the calendar's rules. For example, to subtract 5 days from

the current time of the calendar, call add(Calendar::DATE, -5). When adding on

the month or Calendar::MONTH field, other fields like date might conflict and

need to be changed. For instance, adding 1 month on the date 01/31/96 will result

in 02/29/96.

Adding a positive value always means moving forward in time, so for the Gregorian calendar,

starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces

the numeric value of the field itself).

Parameters

field Specifies which date field to modify.
amount The amount of time to be added to the field, in the natural unit for that field (e.g., days for the day fields, hours for the hour field.)
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status. ICU 2.6.
int32_t fieldDifference (UDate when, EDateFields field, UErrorCode & status)

Return the difference between the given time and the time this

calendar object is set to. If this calendar is set

before

the given time, the returned value will be

positive. If this calendar is set

after

the given

time, the returned value will be negative. The

field

parameter specifies the units of the return

value. For example, if

fieldDifference(when,

Calendar::MONTH)

returns 3, then this calendar is set to

3 months before

when

, and possibly some addition

time less than one month.

As a side effect of this call, this calendar is advanced

toward

when

by the given amount. That is, calling

this method has the side effect of calling

add(field,

n)

, where

n

is the return value.

Usage: To use this method, call it first with the largest

field of interest, then with progressively smaller fields. For

example:

int y = cal->fieldDifference(when, Calendar::YEAR, err);

int m = cal->fieldDifference(when, Calendar::MONTH, err);

int d = cal->fieldDifference(when, Calendar::DATE, err);

computes the difference between

cal

and

when

in years, months, and days.

Note:

fieldDifference()

is

asymmetrical

. That is, in the following code:

cal->setTime(date1, err);

int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);

int d1 = cal->fieldDifference(date2, Calendar::DATE, err);

cal->setTime(date2, err);

int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);

int d2 = cal->fieldDifference(date1, Calendar::DATE, err);

one might expect that

m1 == -m2

&

&

d1 == -d2

.

However, this is not generally the case, because of

irregularities in the underlying calendar system (e.g., the

Gregorian calendar has a varying number of days per month).

Parameters

when the date to compare this calendar's time to
field the field in which to compute the result
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid, this will be set to an error status.

Returns

the difference, either positive or negative, between

this calendar's time and

when

, in terms of

field

.

int32_t fieldDifference (UDate when, UCalendarDateFields field, UErrorCode & status)

Return the difference between the given time and the time this

calendar object is set to. If this calendar is set

before

the given time, the returned value will be

positive. If this calendar is set

after

the given

time, the returned value will be negative. The

field

parameter specifies the units of the return

value. For example, if

fieldDifference(when,

Calendar::MONTH)

returns 3, then this calendar is set to

3 months before

when

, and possibly some addition

time less than one month.

As a side effect of this call, this calendar is advanced

toward

when

by the given amount. That is, calling

this method has the side effect of calling

add(field,

n)

, where

n

is the return value.

Usage: To use this method, call it first with the largest

field of interest, then with progressively smaller fields. For

example:

int y = cal->fieldDifference(when, Calendar::YEAR, err);

int m = cal->fieldDifference(when, Calendar::MONTH, err);

int d = cal->fieldDifference(when, Calendar::DATE, err);

computes the difference between

cal

and

when

in years, months, and days.

Note:

fieldDifference()

is

asymmetrical

. That is, in the following code:

cal->setTime(date1, err);

int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);

int d1 = cal->fieldDifference(date2, Calendar::DATE, err);

cal->setTime(date2, err);

int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);

int d2 = cal->fieldDifference(date1, Calendar::DATE, err);

one might expect that

m1 == -m2

&

&

d1 == -d2

.

However, this is not generally the case, because of

irregularities in the underlying calendar system (e.g., the

Gregorian calendar has a varying number of days per month).

Parameters

when the date to compare this calendar's time to
field the field in which to compute the result
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid, this will be set to an error status.

Returns

the difference, either positive or negative, between

this calendar's time and

when

, in terms of

field

.

ICU 2.6.

void adoptTimeZone (TimeZone * value)

Sets the calendar's time zone to be the one passed in. The Calendar takes ownership

of the TimeZone; the caller is no longer responsible for deleting it. If the

given time zone is nullptr, this function has no effect.

Parameters

value The given time zone. ICU 2.0
const TimeZone & getTimeZone ()

Returns a reference to the time zone owned by this calendar. The returned reference

is only valid until clients make another call to adoptTimeZone or setTimeZone,

or this Calendar is destroyed.

Returns

The time zone object associated with this calendar.

ICU 2.0

UBool inDaylightTime (UErrorCode & status)

Queries if the current date for this Calendar is in Daylight Savings Time.

Parameters

status Fill-in parameter which receives the status of this operation.

Returns

True if the current date for this Calendar is in Daylight Savings Time,

false, otherwise.

ICU 2.0

UCalendarWallTimeOption getRepeatedWallTimeOption ()

Gets the behavior for handling wall time repeating multiple times

at negative time zone offset transitions.

Returns

the behavior for handling repeating wall time, either

UCAL_WALLTIME_FIRST

or

UCAL_WALLTIME_LAST

.

UCalendarWallTimeOption getSkippedWallTimeOption ()

Gets the behavior for handling skipped wall time at positive time zone offset

transitions.

Returns

the behavior for handling skipped wall time, one of

UCAL_WALLTIME_FIRST

,

UCAL_WALLTIME_LAST

and

UCAL_WALLTIME_NEXT_VALID

.

EDaysOfWeek getFirstDayOfWeek ()

Gets what the first day of the week is; e.g., Sunday in US, Monday in France.

Returns

The first day of the week.

UCalendarDaysOfWeek getFirstDayOfWeek (UErrorCode & status)

Gets what the first day of the week is; e.g., Sunday in US, Monday in France.

Parameters

status error code

Returns

The first day of the week.

ICU 2.6

uint8_t getMinimalDaysInFirstWeek ()

Gets what the minimal days required in the first week of the year are; e.g., if

the first week is defined as one that contains the first day of the first month

of a year, getMinimalDaysInFirstWeek returns 1. If the minimal days required must

be a full week, getMinimalDaysInFirstWeek returns 7.

Returns

The minimal days required in the first week of the year.

ICU 2.0

int32_t getMinimum (EDateFields field)

Gets the minimum value for the given time field. e.g., for Gregorian

DAY_OF_MONTH, 1.

Parameters

field The given time field.

Returns

The minimum value for the given time field.

int32_t getMinimum (UCalendarDateFields field)

Gets the minimum value for the given time field. e.g., for Gregorian

DAY_OF_MONTH, 1.

Parameters

field The given time field.

Returns

The minimum value for the given time field.

ICU 2.6.

int32_t getMaximum (EDateFields field)

Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,

31.

Parameters

field The given time field.

Returns

The maximum value for the given time field.

int32_t getMaximum (UCalendarDateFields field)

Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,

31.

Parameters

field The given time field.

Returns

The maximum value for the given time field.

ICU 2.6.

int32_t getGreatestMinimum (EDateFields field)

Gets the highest minimum value for the given field if varies. Otherwise same as

getMinimum(). For Gregorian, no difference.

Parameters

field The given time field.

Returns

The highest minimum value for the given time field.

int32_t getGreatestMinimum (UCalendarDateFields field)

Gets the highest minimum value for the given field if varies. Otherwise same as

getMinimum(). For Gregorian, no difference.

Parameters

field The given time field.

Returns

The highest minimum value for the given time field.

ICU 2.6.

int32_t getLeastMaximum (EDateFields field)

Gets the lowest maximum value for the given field if varies. Otherwise same as

getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.

Parameters

field The given time field.

Returns

The lowest maximum value for the given time field.

int32_t getLeastMaximum (UCalendarDateFields field)

Gets the lowest maximum value for the given field if varies. Otherwise same as

getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.

Parameters

field The given time field.

Returns

The lowest maximum value for the given time field.

ICU 2.6.

int32_t getActualMinimum (EDateFields field, UErrorCode & status)

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().

The version of this function on Calendar uses an iterative algorithm to determine the

actual minimum value for the field. There is almost always a more efficient way to

accomplish this (in most cases, you can simply return getMinimum()). GregorianCalendar

overrides this function with a more efficient implementation.

Parameters

field the field to determine the minimum of
status Fill-in parameter which receives the status of this operation.

Returns

the minimum of the given field for the current date of this Calendar

int32_t getActualMinimum (UCalendarDateFields field, UErrorCode & status)

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().

The version of this function on Calendar uses an iterative algorithm to determine the

actual minimum value for the field. There is almost always a more efficient way to

accomplish this (in most cases, you can simply return getMinimum()). GregorianCalendar

overrides this function with a more efficient implementation.

Parameters

field the field to determine the minimum of
status Fill-in parameter which receives the status of this operation.

Returns

the minimum of the given field for the current date of this Calendar

ICU 2.6.

int32_t getActualMaximum (UCalendarDateFields field, UErrorCode & status)

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.

The version of this function on Calendar uses an iterative algorithm to determine the

actual maximum value for the field. There is almost always a more efficient way to

accomplish this (in most cases, you can simply return getMaximum()). GregorianCalendar

overrides this function with a more efficient implementation.

Parameters

field the field to determine the maximum of
status Fill-in parameter which receives the status of this operation.

Returns

the maximum of the given field for the current date of this Calendar

ICU 2.6.

int32_t get (UCalendarDateFields field, UErrorCode & status)

Gets the value for a given time field. Recalculate the current time field values

if the time value has been changed by a call to setTime(). Return zero for unset

fields if any fields have been explicitly set by a call to set(). To force a

recomputation of all fields regardless of the previous state, call complete().

This method is semantically const, but may alter the object in memory.

Parameters

field The given time field.
status Fill-in parameter which receives the status of the operation.

Returns

The value for the given time field, or zero if the field is unset,

and set() has been called for any other field.

ICU 2.6.

void clear ()

Clears the values of all the time fields, making them both unset and assigning

them a value of zero. The field values will be determined during the next

resolving of time into time fields.

ICU 2.0

void clear (UCalendarDateFields field)

Clears the value in the given time field, both making it unset and assigning it a

value of zero. This field value will be determined during the next resolving of

time into time fields. Clearing UCAL_ORDINAL_MONTH or UCAL_MONTH will

clear both fields.

Parameters

field The time field to be cleared. ICU 2.6.
UClassID getDynamicClassID ()

Returns a unique class ID POLYMORPHICALLY. Pure virtual method. 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.

<P

>

Concrete subclasses of Calendar must implement getDynamicClassID() and also a

static method and data member:

static UClassID getStaticClassID() { return (UClassID)

&

fgClassID; }

static char fgClassID;

Returns

The class ID for this object. All objects of a given class have the

same class ID. Objects of other classes have different class IDs.

ICU 2.0

const char * getType ()

Returns the calendar type name string for this Calendar object.

The returned string is the legacy ICU calendar attribute value,

for example, "gregorian" or "japanese".

See type="old type name" for the calendar attribute of locale IDs

at http://www.unicode.org/reports/tr35/#Key_Type_Definitions

Sample code for getting the LDML/BCP 47 calendar key value:

Returns

legacy calendar type name string

ICU 49

Code

                                        
                                             const char *calType = cal->getType();
                                             if (0 == strcmp(calType, "unknown")) {
                                                 // deal with unknown calendar type
                                             } else {
                                                 string localeID("root@calendar=");
                                                 localeID.append(calType);
                                                 char langTag[100];
                                                 UErrorCode errorCode = U_ZERO_ERROR;
                                                 int32_t length = uloc_toLanguageTag(localeID.c_str(), langTag, (int32_t)sizeof(langTag), true, &errorCode);
                                                 if (U_FAILURE(errorCode)) {
                                                     // deal with errors & overflow
                                                 }
                                                 string lang(langTag, length);
                                                 size_t caPos = lang.find("-ca-");
                                                 lang.erase(0, caPos + 4);
                                                 // lang now contains the LDML calendar type
                                             }
                                        
                                    
UCalendarWeekdayType getDayOfWeekType (UCalendarDaysOfWeek dayOfWeek, UErrorCode & status)

Returns whether the given day of the week is a weekday, a weekend day,

or a day that transitions from one to the other, for the locale and

calendar system associated with this Calendar (the locale's region is

often the most determinant factor). If a transition occurs at midnight,

then the days before and after the transition will have the

type UCAL_WEEKDAY or UCAL_WEEKEND. If a transition occurs at a time

other than midnight, then the day of the transition will have

the type UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE. In this case, the

method getWeekendTransition() will return the point of

transition.

Parameters

dayOfWeek The day of the week whose type is desired (UCAL_SUNDAY..UCAL_SATURDAY).
status The error code for the operation.

Returns

The UCalendarWeekdayType for the day of the week.

ICU 4.4

UDate getTime (UErrorCode & status)

Gets this Calendar's time as milliseconds. May involve recalculation of time due

to previous calls to set time field values. The time specified is non-local UTC

(GMT) time. Although this method is const, this object may actually be changed

(semantically const).

Parameters

status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status.

Returns

The current time in UTC (GMT) time, or zero if the operation

failed.

ICU 2.0

Defined at line 432 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t getWeekendTransition (UCalendarDaysOfWeek dayOfWeek, UErrorCode & status)

Returns the time during the day at which the weekend begins or ends in

this calendar system. If getDayOfWeekType() returns UCAL_WEEKEND_ONSET

for the specified dayOfWeek, return the time at which the weekend begins.

If getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek,

return the time at which the weekend ends. If getDayOfWeekType() returns

some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition

(U_ILLEGAL_ARGUMENT_ERROR).

Parameters

dayOfWeek The day of the week for which the weekend transition time is desired (UCAL_SUNDAY..UCAL_SATURDAY).
status The error code for the operation.

Returns

The milliseconds after midnight at which the weekend begins or ends.

ICU 4.4

void ~Calendar ()

destructor

ICU 2.0

Calendar * createInstance (TimeZone * zoneToAdopt, UErrorCode & success)

-------------------------------------

Defined at line 2514 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

bool operator== (const Calendar & that)

Compares the equality of two Calendar objects. Objects of different subclasses

are considered unequal. This comparison is very exacting; two Calendar objects

must be in exactly the same state to be considered equal. To compare based on the

represented time, use equals() instead.

Parameters

that The Calendar object to be compared with.

Returns

true if the given Calendar is the same as this Calendar; false

otherwise.

ICU 2.0

UBool isEquivalentTo (const Calendar & other)

Returns true if the given Calendar object is equivalent to this

one. An equivalent Calendar will behave exactly as this one

does, but it may be set to a different time. By contrast, for

the operator==() method to return true, the other Calendar must

be set to the same time.

Parameters

other the Calendar to be compared with this Calendar ICU 2.4
void roll (EDateFields field, UBool up, UErrorCode & status)

Time Field Rolling function. Rolls (up/down) a single unit of time on the given

time field. For example, to roll the current date up by one day, call

roll(Calendar::DATE, true). When rolling on the year or Calendar::YEAR field, it

will roll the year value in the range between getMinimum(Calendar::YEAR) and the

value returned by getMaximum(Calendar::YEAR). When rolling on the month or

Calendar::MONTH field, other fields like date might conflict and, need to be

changed. For instance, rolling the month up on the date 01/31/96 will result in

02/29/96. Rolling up always means rolling forward in time (unless the limit of the

field is reached, in which case it may pin or wrap), so for Gregorian calendar,

starting with 100 BC and rolling the year up results in 99 BC.

When eras have a definite beginning and end (as in the Chinese calendar, or as in

most eras in the Japanese calendar) then rolling the year past either limit of the

era will cause the year to wrap around. When eras only have a limit at one end,

then attempting to roll the year past that limit will result in pinning the year

at that limit. Note that for most calendars in which era 0 years move forward in

time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to

result in negative years for era 0 (that is the only way to represent years before

the calendar epoch).

When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the

hour value in the range between 0 and 23, which is zero-based.

<P

>

NOTE: Do not use this method -- use roll(EDateFields, int, UErrorCode

&

) instead.

Parameters

field The time field.
up Indicates if the value of the specified time field is to be rolled up or rolled down. Use true if rolling up, false otherwise.
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status.

Defined at line 2530 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

void roll (UCalendarDateFields field, UBool up, UErrorCode & status)

-------------------------------------

Defined at line 2523 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

void roll (EDateFields field, int32_t amount, UErrorCode & status)

Time Field Rolling function. Rolls by the given amount on the given

time field. For example, to roll the current date up by one day, call

roll(Calendar::DATE, +1, status). When rolling on the month or

Calendar::MONTH field, other fields like date might conflict and, need to be

changed. For instance, rolling the month up on the date 01/31/96 will result in

02/29/96. Rolling by a positive value always means rolling forward in time (unless

the limit of the field is reached, in which case it may pin or wrap), so for

Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC.

When eras have a definite beginning and end (as in the Chinese calendar, or as in

most eras in the Japanese calendar) then rolling the year past either limit of the

era will cause the year to wrap around. When eras only have a limit at one end,

then attempting to roll the year past that limit will result in pinning the year

at that limit. Note that for most calendars in which era 0 years move forward in

time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to

result in negative years for era 0 (that is the only way to represent years before

the calendar epoch).

When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the

hour value in the range between 0 and 23, which is zero-based.

<P

>

The only difference between roll() and add() is that roll() does not change

the value of more significant fields when it reaches the minimum or maximum

of its range, whereas add() does.

Parameters

field The time field.
amount Indicates amount to roll.
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid, this will be set to an error status.
void roll (UCalendarDateFields field, int32_t amount, UErrorCode & status)

Time Field Rolling function. Rolls by the given amount on the given

time field. For example, to roll the current date up by one day, call

roll(Calendar::DATE, +1, status). When rolling on the month or

Calendar::MONTH field, other fields like date might conflict and, need to be

changed. For instance, rolling the month up on the date 01/31/96 will result in

02/29/96. Rolling by a positive value always means rolling forward in time (unless

the limit of the field is reached, in which case it may pin or wrap), so for

Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC.

When eras have a definite beginning and end (as in the Chinese calendar, or as in

most eras in the Japanese calendar) then rolling the year past either limit of the

era will cause the year to wrap around. When eras only have a limit at one end,

then attempting to roll the year past that limit will result in pinning the year

at that limit. Note that for most calendars in which era 0 years move forward in

time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to

result in negative years for era 0 (that is the only way to represent years before

the calendar epoch).

When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the

hour value in the range between 0 and 23, which is zero-based.

<P

>

The only difference between roll() and add() is that roll() does not change

the value of more significant fields when it reaches the minimum or maximum

of its range, whereas add() does.

Parameters

field The time field.
amount Indicates amount to roll.
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid, this will be set to an error status. ICU 2.6.
void setTimeZone (const TimeZone & zone)

Sets the calendar's time zone to be the same as the one passed in. The TimeZone

passed in is _not_ adopted; the client is still responsible for deleting it.

Parameters

zone The given time zone. ICU 2.0
TimeZone * orphanTimeZone ()

Returns the time zone owned by this calendar. The caller owns the returned object

and must delete it when done. After this call, the new time zone associated

with this Calendar is the default TimeZone as returned by TimeZone::createDefault().

Returns

The time zone object which was associated with this calendar.

ICU 2.0

void setLenient (UBool lenient)

Specifies whether or not date/time interpretation is to be lenient. With lenient

interpretation, a date such as "February 942, 1996" will be treated as being

equivalent to the 941st day after February 1, 1996. With strict interpretation,

such dates will cause an error when computing time from the time field values

representing the dates.

Parameters

lenient True specifies date/time interpretation to be lenient.
UBool isLenient ()

Tells whether date/time interpretation is to be lenient.

Returns

True tells that date/time interpretation is to be lenient.

ICU 2.0

void setRepeatedWallTimeOption (UCalendarWallTimeOption option)

Sets the behavior for handling wall time repeating multiple times

at negative time zone offset transitions. For example, 1:30 AM on

November 6, 2011 in US Eastern time (America/New_York) occurs twice;

1:30 AM EDT, then 1:30 AM EST one hour later. When

UCAL_WALLTIME_FIRST

is used, the wall time 1:30AM in this example will be interpreted as 1:30 AM EDT

(first occurrence). When

UCAL_WALLTIME_LAST

is used, it will be

interpreted as 1:30 AM EST (last occurrence). The default value is

UCAL_WALLTIME_LAST

.

Note:

When

UCAL_WALLTIME_NEXT_VALID

is not a valid

option for this. When the argument is neither

UCAL_WALLTIME_FIRST

nor

UCAL_WALLTIME_LAST

, this method has no effect and will keep

the current setting.

Parameters

option the behavior for handling repeating wall time, eitherUCAL_WALLTIME_FIRST or UCAL_WALLTIME_LAST.
void setSkippedWallTimeOption (UCalendarWallTimeOption option)

Sets the behavior for handling skipped wall time at positive time zone offset

transitions. For example, 2:30 AM on March 13, 2011 in US Eastern time (America/New_York)

does not exist because the wall time jump from 1:59 AM EST to 3:00 AM EDT. When

UCAL_WALLTIME_FIRST

is used, 2:30 AM is interpreted as 30 minutes before 3:00 AM

EDT, therefore, it will be resolved as 1:30 AM EST. When

UCAL_WALLTIME_LAST

is used, 2:30 AM is interpreted as 31 minutes after 1:59 AM EST, therefore, it will be

resolved as 3:30 AM EDT. When

UCAL_WALLTIME_NEXT_VALID

is used, 2:30 AM will

be resolved as next valid wall time, that is 3:00 AM EDT. The default value is

UCAL_WALLTIME_LAST

.

Note:

This option is effective only when this calendar is lenient.

When the calendar is strict, such non-existing wall time will cause an error.

ICU 49

Parameters

option the behavior for handling skipped wall time at positive time zone offset transitions, one of UCAL_WALLTIME_FIRST, UCAL_WALLTIME_LAST andUCAL_WALLTIME_NEXT_VALID.
void setFirstDayOfWeek (UCalendarDaysOfWeek value)

Sets what the first day of the week is; e.g., Sunday in US, Monday in France.

Parameters

value The given first day of the week. ICU 2.6.
void setMinimalDaysInFirstWeek (uint8_t value)

Sets what the minimal days required in the first week of the year are; For

example, if the first week is defined as one that contains the first day of the

first month of a year, call the method with value 1. If it must be a full week,

use value 7.

Parameters

value The given minimal days required in the first week of the year. ICU 2.0
UBool isSet (UCalendarDateFields field)

Determines if the given time field has a value set. This can affect in the

resolving of time in Calendar. Unset fields have a value of zero, by definition.

Parameters

field The given time field.

Returns

True if the given time field has a value set; false otherwise.

ICU 2.6.

void set (UCalendarDateFields field, int32_t value)

Sets the given time field with the given value.

Parameters

field The given time field.
value The value to be set for the given time field. ICU 2.6.
void set (int32_t year, int32_t month, int32_t date)

Sets the values for the fields YEAR, MONTH, and DATE. Other field values are

retained; call clear() first if this is not desired.

Parameters

year The value used to set the YEAR time field.
month The value used to set the MONTH time field. Month value is 0-based. e.g., 0 for January.
date The value used to set the DATE time field. ICU 2.0
void set (int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute)

Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, and MINUTE. Other

field values are retained; call clear() first if this is not desired.

Parameters

year The value used to set the YEAR time field.
month The value used to set the MONTH time field. Month value is 0-based. E.g., 0 for January.
date The value used to set the DATE time field.
hour The value used to set the HOUR_OF_DAY time field.
minute The value used to set the MINUTE time field. ICU 2.0
void set (int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second)

Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, MINUTE, and SECOND.

Other field values are retained; call clear() first if this is not desired.

Parameters

year The value used to set the YEAR time field.
month The value used to set the MONTH time field. Month value is 0-based. E.g., 0 for January.
date The value used to set the DATE time field.
hour The value used to set the HOUR_OF_DAY time field.
minute The value used to set the MINUTE time field.
second The value used to set the SECOND time field. ICU 2.0
UBool isWeekend (UDate date, UErrorCode & status)

Returns true if the given UDate is in the weekend in

this calendar system.

Parameters

date The UDate in question.
status The error code for the operation.

Returns

true if the given UDate is in the weekend in

this calendar system, false otherwise.

ICU 4.4

UBool isWeekend ()

Returns true if this Calendar's current date-time is in the weekend in

this calendar system.

Returns

true if this Calendar's current date-time is in the weekend in

this calendar system, false otherwise.

ICU 4.4

bool inTemporalLeapYear (UErrorCode & status)

Returns true if the date is in a leap year. Recalculate the current time

field values if the time value has been changed by a call to * setTime().

This method is semantically const, but may alter the object in memory.

A "leap year" is a year that contains more days than other years (for

solar or lunar calendars) or more months than other years (for lunisolar

calendars like Hebrew or Chinese), as defined in the ECMAScript Temporal

proposal.

Parameters

status ICU Error Code

Returns

True if the date in the fields is in a Temporal proposal

defined leap year. False otherwise.

ICU 73

const char * getTemporalMonthCode (UErrorCode & status)

Gets The Temporal monthCode value corresponding to the month for the date.

The value is a string identifier that starts with the literal grapheme

"M" followed by two graphemes representing the zero-padded month number

of the current month in a normal (non-leap) year and suffixed by an

optional literal grapheme "L" if this is a leap month in a lunisolar

calendar. The 25 possible values are "M01" .. "M13" and "M01L" .. "M12L".

For the Hebrew calendar, the values are "M01" .. "M12" for non-leap year, and

"M01" .. "M05", "M05L", "M06" .. "M12" for leap year.

For the Chinese calendar, the values are "M01" .. "M12" for non-leap year and

in leap year with another monthCode in "M01L" .. "M12L".

For Coptic and Ethiopian calendar, the Temporal monthCode values for any

years are "M01" to "M13".

Parameters

status ICU Error Code

Returns

One of 25 possible strings in {"M01".."M13", "M01L".."M12L"}.

ICU 73

void setTemporalMonthCode (const char * temporalMonth, UErrorCode & status)

Sets The Temporal monthCode which is a string identifier that starts

with the literal grapheme "M" followed by two graphemes representing

the zero-padded month number of the current month in a normal

(non-leap) year and suffixed by an optional literal grapheme "L" if this

is a leap month in a lunisolar calendar. The 25 possible values are

"M01" .. "M13" and "M01L" .. "M12L". For Hebrew calendar, the values are

"M01" .. "M12" for non-leap years, and "M01" .. "M05", "M05L", "M06"

.. "M12" for leap year.

For the Chinese calendar, the values are "M01" .. "M12" for non-leap year and

in leap year with another monthCode in "M01L" .. "M12L".

For Coptic and Ethiopian calendar, the Temporal monthCode values for any

years are "M01" to "M13".

ICU 73

Parameters

temporalMonth The value to be set for temporal monthCode.
status ICU Error Code
StringEnumeration * getAvailableLocales ()

Return a StringEnumeration over the locales available at the time of the call,

including registered locales.

Returns

a StringEnumeration over the locales available at the time of the call

void setTime (UDate date, UErrorCode & status)

Sets this Calendar's current time with the given UDate. The time specified should

be in non-local UTC (GMT) time.

Parameters

date The given UDate in UTC (GMT) time.
status Output param set to success/failure code on exit. If any value set in the time field is invalid or restricted by leniency, this will be set to an error status. ICU 2.0

Defined at line 444 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

bool operator!= (const Calendar & that)

Compares the inequality of two Calendar objects.

Parameters

that The Calendar object to be compared with.

Returns

true if the given Calendar is not the same as this Calendar; false

otherwise.

ICU 2.0

Defined at line 467 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

URegistryKey registerFactory (ICUServiceFactory * toAdopt, UErrorCode & status)

Register a new Calendar factory. The factory will be adopted.

INTERNAL in 2.6

Because ICU may choose to cache Calendars internally, this must

be called at application startup, prior to any calls to

Calendar::createInstance to avoid undefined behavior.

Parameters

toAdopt the factory instance to be adopted
status the in/out status code, no special meanings are assigned

Returns

a registry key that can be used to unregister this factory

UBool unregister (URegistryKey key, UErrorCode & status)

Unregister a previously-registered CalendarFactory using the key returned from the

register call. Key becomes invalid after a successful call and should not be used again.

The CalendarFactory corresponding to the key will be deleted.

INTERNAL in 2.6

Because ICU may choose to cache Calendars internally, this should

be called during application shutdown, after all calls to

Calendar::createInstance to avoid undefined behavior.

Parameters

key the registry key returned by a previous call to registerFactory
status the in/out status code, no special meanings are assigned

Returns

true if the factory for the key was successfully unregistered

UBool haveDefaultCentury ()

Returns

true if this calendar has a default century (i.e. 03 -> 2003)

UDate defaultCenturyStart ()

Returns

the start of the default century, as a UDate

int32_t defaultCenturyStartYear ()

Returns

the beginning year of the default century, as a year

Locale getLocale (ULocDataLocaleType type, UErrorCode & status)

Get the locale for this calendar object. You can choose between valid and actual locale.

Parameters

type type of the locale we're looking for (valid or actual)
status error code for the operation

Returns

the locale

ICU 2.8

int32_t getRelatedYear (UErrorCode & status)

Returns

The related Gregorian year; will be obtained by modifying the value

obtained by get from UCAL_EXTENDED_YEAR field

void setRelatedYear (int32_t year)

Parameters

year The related Gregorian year to set; will be modified as necessary then set in UCAL_EXTENDED_YEAR field
const char * getLocaleID (ULocDataLocaleType type, UErrorCode & status)

Get the locale for this calendar object. You can choose between valid and actual locale.

Parameters

type type of the locale we're looking for (valid or actual)
status error code for the operation

Returns

the locale

Calendar * makeInstance (const Locale & locale, UErrorCode & status)

Creates a new Calendar from a Locale for the cache.

This method does not set the time or timezone in returned calendar.

Parameters

locale the locale.
status any error returned here.

Returns

the new Calendar object with no time or timezone set.

void getCalendarTypeFromLocale (const Locale & locale, char * typeBuffer, int32_t typeBufferSize, UErrorCode & status)

Get the calendar type for given locale.

Parameters

locale the locale
typeBuffer calendar type returned here
typeBufferSize The size of typeBuffer in bytes. If the type can't fit in the buffer, this method sets status to U_BUFFER_OVERFLOW_ERROR
status error, if any, returned here.

Protected Methods

int32_t internalGet (EDateFields field)

Gets the value for a given time field. Subclasses can use this function to get

field values without forcing recomputation of time.

Parameters

field The given time field.

Returns

The value for the given time field.

Defined at line 1526 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t internalGet (UCalendarDateFields field, int32_t defaultValue)

Gets the value for a given time field. Subclasses can use this function to get

field values without forcing recomputation of time. If the field's stamp is UNSET,

the defaultValue is used.

Parameters

field The given time field.
defaultValue a default value used if the field is unset.

Returns

The value for the given time field.

Defined at line 1540 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t internalGet (UCalendarDateFields field)

Gets the value for a given time field. Subclasses can use this function to get

field values without forcing recomputation of time.

Parameters

field The given time field.

Returns

The value for the given time field.

Defined at line 1550 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

bool isEra0CountingBackward ()

The year in this calendar is counting from 1 backward if the era is 0.

Returns

The year in era 0 of this calendar is counting backward from 1.

Defined at line 1557 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

UDate internalGetTime ()

Get the current time without recomputing.

Returns

the current time without recomputing.

ICU 2.0

Defined at line 1891 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

void internalSetTime (UDate time)

Set the current time without affecting flags or fields.

Parameters

time The time to be set

Returns

the current time without recomputing.

ICU 2.0

Defined at line 1900 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t getGregorianYear ()

Return the extended year on the Gregorian calendar as computed by

computeGregorianFields()

.

Defined at line 1959 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t getGregorianMonth ()

Return the month (0-based) on the Gregorian calendar as computed by

computeGregorianFields()

.

Defined at line 1968 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t getGregorianDayOfYear ()

Return the day of year (1-based) on the Gregorian calendar as

computed by

computeGregorianFields()

.

Defined at line 1977 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t getGregorianDayOfMonth ()

Return the day of month (1-based) on the Gregorian calendar as

computed by

computeGregorianFields()

.

Defined at line 1986 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

void Calendar (UErrorCode & success)

Constructs a Calendar with the default time zone as returned by

TimeZone::createInstance(), and the default locale.

Parameters

success Indicates the status of Calendar object construction. Returns U_ZERO_ERROR if constructed successfully. ICU 2.0
void Calendar (const Calendar & source)

Copy constructor

Parameters

source Calendar object to be copied from ICU 2.0
Calendar & operator= (const Calendar & right)

Default assignment operator

Parameters

right Calendar object to be copied ICU 2.0
void Calendar (TimeZone * zone, const Locale & aLocale, UErrorCode & success)

Constructs a Calendar with the given time zone and locale. Clients are no longer

responsible for deleting the given time zone object after it's adopted.

Parameters

zone The given time zone.
aLocale The given locale.
success Indicates the status of Calendar object construction. Returns U_ZERO_ERROR if constructed successfully. ICU 2.0
void Calendar (const TimeZone & zone, const Locale & aLocale, UErrorCode & success)

Constructs a Calendar with the given time zone and locale.

Parameters

zone The given time zone.
aLocale The given locale.
success Indicates the status of Calendar object construction. Returns U_ZERO_ERROR if constructed successfully. ICU 2.0
void computeTime (UErrorCode & status)

Converts Calendar's time field values to GMT as milliseconds.

Parameters

status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status. ICU 2.0
void computeFields (UErrorCode & status)

Converts GMT as milliseconds to time field values. This allows you to sync up the

time field values with a new time that is set for the calendar. This method

does NOT recompute the time first; to recompute the time, then the fields, use

the method complete().

Parameters

status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status. ICU 2.0
double getTimeInMillis (UErrorCode & status)

Gets this Calendar's current time as a long.

Parameters

status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status.

Returns

the current time as UTC milliseconds from the epoch.

ICU 2.0

void setTimeInMillis (double millis, UErrorCode & status)

Sets this Calendar's current time from the given long value.

Parameters

millis the new time in UTC milliseconds from the epoch.
status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status. ICU 2.0
void complete (UErrorCode & status)

Recomputes the current time from currently set fields, and then fills in any

unset fields in the time field list.

Parameters

status Output param set to success/failure code on exit. If any value previously set in the time field is invalid or restricted by leniency, this will be set to an error status. ICU 2.0
int32_t internalGetMonth (UErrorCode & status)

Use this function instead of internalGet(UCAL_MONTH). The implementation

check the timestamp of UCAL_MONTH and UCAL_ORDINAL_MONTH and use the

one set later. The subclass should override it to conver the value of UCAL_ORDINAL_MONTH

to UCAL_MONTH correctly if UCAL_ORDINAL_MONTH has higher priority.

Returns

The value for the UCAL_MONTH.

int32_t internalGetMonth (int32_t defaultValue, UErrorCode & status)

Use this function instead of internalGet(UCAL_MONTH, defaultValue). The implementation

check the timestamp of UCAL_MONTH and UCAL_ORDINAL_MONTH and use the

one set later. The subclass should override it to conver the value of UCAL_ORDINAL_MONTH

to UCAL_MONTH correctly if UCAL_ORDINAL_MONTH has higher priority.

Parameters

defaultValue a default value used if the UCAL_MONTH and UCAL_ORDINAL are both unset.
status Output param set to failure code on function return when this function fails.

Returns

The value for the UCAL_MONTH.

void internalSet (EDateFields field, int32_t value)

Sets the value for a given time field. This is a fast internal method for

subclasses. It does not affect the areFieldsInSync, isTimeSet, or areAllFieldsSet

flags.

Parameters

field The given time field.
value The value for the given time field.
void internalSet (UCalendarDateFields field, int32_t value)

Fast method for subclasses. The caller must maintain fUserSetDSTOffset and

fUserSetZoneOffset, as well as the isSet[] array.

Defined at line 2545 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

void prepareGetActual (UCalendarDateFields field, UBool isMinimum, UErrorCode & status)

Prepare this calendar for computing the actual minimum or maximum.

This method modifies this calendar's fields; it is called on a

temporary calendar.

int32_t handleGetLimit (UCalendarDateFields field, ELimitType limitType)

Subclass API for defining limits of different types.

Subclasses must implement this method to return limits for the

following fields:

UCAL_ERA

UCAL_YEAR

UCAL_MONTH

UCAL_WEEK_OF_YEAR

UCAL_WEEK_OF_MONTH

UCAL_DATE (DAY_OF_MONTH on Java)

UCAL_DAY_OF_YEAR

UCAL_DAY_OF_WEEK_IN_MONTH

UCAL_YEAR_WOY

UCAL_EXTENDED_YEAR

Parameters

field one of the above field numbers
limitType one of MINIMUM, GREATEST_MINIMUM,LEAST_MAXIMUM, or MAXIMUM
int32_t getLimit (UCalendarDateFields field, ELimitType limitType)

Return a limit for a field.

Parameters

field the field, from 0..UCAL_MAX_FIELD
limitType the type specifier for the limit
int64_t handleComputeMonthStart (int32_t eyear, int32_t month, UBool useMonth, UErrorCode & status)

Return the Julian day number of day before the first day of the

given month in the given extended year. Subclasses should override

this method to implement their calendar system.

Parameters

eyear the extended year
month the zero-based month, or 0 if useMonth is false
useMonth if false, compute the day before the first day of the given year, otherwise, compute the day before the first day of the given month
status Output param set to failure code on function return when this function fails.

Returns

the Julian day number of the day before the first

day of the given month and year

int32_t handleGetMonthLength (int32_t extendedYear, int32_t month, UErrorCode & status)

Return the number of days in the given month of the given extended

year of this calendar system. Subclasses should override this

method if they can provide a more correct or more efficient

implementation than the default implementation in Calendar.

int32_t handleGetYearLength (int32_t eyear, UErrorCode & status)

Return the number of days in the given extended year of this

calendar system. Subclasses should override this method if they can

provide a more correct or more efficient implementation than the

default implementation in Calendar.

int32_t handleGetExtendedYear (UErrorCode & status)

Return the extended year defined by the current fields. This will

use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such

as UCAL_ERA) specific to the calendar system, depending on which set of

fields is newer.

Parameters

status ICU Error Code

Returns

the extended year

int32_t handleComputeJulianDay (UCalendarDateFields bestField, UErrorCode & status)

Subclasses may override this. This method calls

handleGetMonthLength() to obtain the calendar-specific month

length.

Parameters

bestField which field to use to calculate the date
status ICU Error Code

Returns

julian day specified by calendar fields.

int32_t handleGetExtendedYearFromWeekFields (int32_t yearWoy, int32_t woy, UErrorCode & status)

Subclasses must override this to convert from week fields

(YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case

where YEAR, EXTENDED_YEAR are not set.

The Calendar implementation assumes yearWoy is in extended gregorian form

Returns

the extended year, UCAL_EXTENDED_YEAR

void validateField (UCalendarDateFields field, UErrorCode & status)

Validate a single field of this calendar. Subclasses should

override this method to validate any calendar-specific fields.

Generic fields can be handled by `Calendar::validateField()`.

int32_t computeJulianDay (UErrorCode & status)

Compute the Julian day from fields. Will determine whether to use

the JULIAN_DAY field directly, or other fields.

Parameters

status ICU Error Code

Returns

the julian day

double computeMillisInDay ()

Compute the milliseconds in the day from the fields. This is a

value from 0 to 23:59:59.999 inclusive, unless fields are out of

range, in which case it can be an arbitrary value. This value

reflects local zone wall time.

int32_t computeZoneOffset (double millis, double millisInDay, UErrorCode & ec)

This method can assume EXTENDED_YEAR has been set.

Parameters

millis milliseconds of the date fields
millisInDay milliseconds of the time fields; may be out or range.
ec Output param set to failure code on function return when this function fails.
int32_t newestStamp (UCalendarDateFields start, UCalendarDateFields end, int32_t bestSoFar)

Determine the best stamp in a range.

Parameters

start first enum to look at
end last enum to look at
bestSoFar stamp prior to function call

Returns

the stamp value of the best stamp

UCalendarDateFields resolveFields (const UFieldResolutionTable * precedenceTable)

Given a precedence table, return the newest field combination in

the table, or UCAL_FIELD_COUNT if none is found.

The precedence table is a 3-dimensional array of integers. It

may be thought of as an array of groups. Each group is an array of

lines. Each line is an array of field numbers. Within a line, if

all fields are set, then the time stamp of the line is taken to be

the stamp of the most recently set field. If any field of a line is

unset, then the line fails to match. Within a group, the line with

the newest time stamp is selected. The first field of the line is

returned to indicate which line matched.

In some cases, it may be desirable to map a line to field that

whose stamp is NOT examined. For example, if the best field is

DAY_OF_WEEK then the DAY_OF_WEEK_IN_MONTH algorithm may be used. In

order to do this, insert the value

kResolveRemap | F

at

the start of the line, where

F

is the desired return

field value. This field will NOT be examined; it only determines

the return value if the other fields in the line are the newest.

If all lines of a group contain at least one unset field, then no

line will match, and the group as a whole will fail to match. In

that case, the next group will be processed. If all groups fail to

match, then UCAL_FIELD_COUNT is returned.

const UFieldResolutionTable * getFieldResolutionTable ()
UCalendarDateFields newerField (UCalendarDateFields defaultField, UCalendarDateFields alternateField)

Return the field that is newer, either defaultField, or

alternateField. If neither is newer or neither is set, return defaultField.

void handleComputeFields (int32_t julianDay, UErrorCode & status)

Subclasses may override this method to compute several fields

specific to each calendar system. These are:

ERA

YEAR

MONTH

DAY_OF_MONTH

DAY_OF_YEAR

EXTENDED_YEAR

Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which

will be set when this method is called. Subclasses can also call

the getGregorianXxx() methods to obtain Gregorian calendar

equivalents for the given Julian day.

In addition, subclasses should compute any subclass-specific

fields, that is, fields from BASE_FIELD_COUNT to

getFieldCount() - 1.

The default implementation in

Calendar

implements

a pure proleptic Gregorian calendar.

int32_t getDefaultMonthInYear (int32_t eyear, UErrorCode & status)

Called by computeJulianDay. Returns the default month (0-based) for the year,

taking year and era into account. Defaults to 0 for Gregorian, which doesn't care.

Parameters

eyear The extended year
status Output param set to failure code on function return when this function fails.
int32_t getDefaultDayInMonth (int32_t eyear, int32_t month, UErrorCode & status)

Called by computeJulianDay. Returns the default day (1-based) for the month,

taking currently-set year and era into account. Defaults to 1 for Gregorian.

Parameters

eyear the extended year
month the month in the year
status Output param set to failure code on function return when this function fails.
void pinField (UCalendarDateFields field, UErrorCode & status)

Adjust the specified field so that it is within

the allowable range for the date to which this calendar is set.

For example, in a Gregorian calendar pinning the {

int32_t weekNumber (int32_t desiredDay, int32_t dayOfPeriod, int32_t dayOfWeek)

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

{

int32_t weekNumber (int32_t dayOfPeriod, int32_t dayOfWeek)

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

{

Defined at line 2564 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

int32_t getLocalDOW (UErrorCode & status)

returns the local DOW, valid range 0..6

void computeGregorianFields (int32_t julianDay, UErrorCode & ec)

Compute the Gregorian calendar year, month, and day of month from the

Julian day. These values are not stored in fields, but in member

variables gregorianXxx. They are used for time zone computations and by

subclasses that are Gregorian derivatives. Subclasses may call this

method to perform a Gregorian calendar millis->fields computation.

uint8_t julianDayToDayOfWeek (int32_t julian)

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.

Parameters

julian The given Julian date number.

Returns

Day number from 1..7 (SUN..SAT).

Enumerations

enum EDateFields
Name Value
ERA 0
YEAR 1
MONTH 2
WEEK_OF_YEAR 3
WEEK_OF_MONTH 4
DATE 5
DAY_OF_YEAR 6
DAY_OF_WEEK 7
DAY_OF_WEEK_IN_MONTH 8
AM_PM 9
HOUR 10
HOUR_OF_DAY 11
MINUTE 12
SECOND 13
MILLISECOND 14
ZONE_OFFSET 15
DST_OFFSET 16
YEAR_WOY 17
DOW_LOCAL 18
EXTENDED_YEAR 19
JULIAN_DAY 20
MILLISECONDS_IN_DAY 21
IS_LEAP_MONTH 22
FIELD_COUNT UCAL_FIELD_COUNT

Field IDs for date and time. Used to specify date/time fields. ERA is calendar

specific. Example ranges given are for illustration only; see specific Calendar

subclasses for actual ranges.

Defined at line 199 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

enum EDaysOfWeek
Name Value
SUNDAY 1
MONDAY 2
TUESDAY 3
WEDNESDAY 4
THURSDAY 5
FRIDAY 6
SATURDAY 7

Useful constant for days of week. Note: Calendar day-of-week is 1-based. Clients

who create locale resources for the field of first-day-of-week should be aware of

this. For instance, in US locale, first-day-of-week is set to 1, i.e., SUNDAY.

Defined at line 244 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

enum EMonths
Name Value
JANUARY 0
FEBRUARY 1
MARCH 2
APRIL 3
MAY 4
JUNE 5
JULY 6
AUGUST 7
SEPTEMBER 8
OCTOBER 9
NOVEMBER 10
DECEMBER 11
UNDECIMBER 12

Useful constants for month. Note: Calendar month is 0-based.

Defined at line 258 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

enum EAmpm
Name Value
AM 0
PM 1

Useful constants for hour in 12-hour clock. Used in GregorianCalendar.

Defined at line 278 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

enum ELimitType
Name Value
UCAL_LIMIT_MINIMUM 0
UCAL_LIMIT_GREATEST_MINIMUM 1
UCAL_LIMIT_LEAST_MAXIMUM 2
UCAL_LIMIT_MAXIMUM 3
UCAL_LIMIT_COUNT 4

Limit enums. Not in sync with UCalendarLimitType (refers to internal fields).

Defined at line 1622 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

enum 
Name Value
kUnset 0
kInternallySet 1
kMinimumUserStamp 2

Special values of stamp[]

ICU 2.0

Defined at line 1912 of file ../../third_party/icu/latest/source/i18n/unicode/calendar.h

Friends

class DefaultCalendarFactory
class CalendarService
class CalendarFactory