ICU 65.1 65.1

Namespaces | Macros | Typedefs | Enumerations | Functions
ucal.h File Reference

C API: Calendar. More...

`#include "unicode/utypes.h"`
`#include "unicode/uenum.h"`
`#include "unicode/uloc.h"`
`#include "unicode/localpointer.h"`

Go to the source code of this file.

## Namespaces
| icu
| File coll.h.

## Macros
#define | UCAL_UNKNOWN_ZONE_ID "Etc/Unknown"
| The time zone ID reserved for unknown time zone. More...

## Typedefs
typedef void * | UCalendar
| A calendar. More...
typedef enum UCalendarType | UCalendarType
typedef enum UCalendarDateFields | UCalendarDateFields
typedef enum UCalendarDaysOfWeek | UCalendarDaysOfWeek
typedef enum UCalendarMonths | UCalendarMonths
typedef enum UCalendarAMPMs | UCalendarAMPMs
typedef enum USystemTimeZoneType | USystemTimeZoneType
typedef enum UCalendarDisplayNameType | UCalendarDisplayNameType
typedef enum UCalendarAttribute | UCalendarAttribute
typedef enum UCalendarWallTimeOption | UCalendarWallTimeOption
typedef enum UCalendarLimitType | UCalendarLimitType
typedef enum UCalendarWeekdayType | UCalendarWeekdayType
typedef enum UTimeZoneTransitionType | UTimeZoneTransitionType

## Enumerations
enum | UCalendarType { UCAL_TRADITIONAL, UCAL_DEFAULT = UCAL_TRADITIONAL, UCAL_GREGORIAN }
| Possible types of UCalendars. More...
enum | UCalendarDateFields { UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET, UCAL_YEAR_WOY, UCAL_DOW_LOCAL, UCAL_EXTENDED_YEAR, UCAL_JULIAN_DAY, UCAL_MILLISECONDS_IN_DAY, UCAL_IS_LEAP_MONTH, UCAL_FIELD_COUNT, UCAL_DAY_OF_MONTH =UCAL_DATE }
| Possible fields in a UCalendar. More...
enum | UCalendarDaysOfWeek { UCAL_SUNDAY = 1, UCAL_MONDAY, UCAL_TUESDAY, UCAL_WEDNESDAY, UCAL_THURSDAY, UCAL_FRIDAY, UCAL_SATURDAY }
| Useful constant for days of week. More...
enum | UCalendarMonths { UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY, UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER }
| Possible months in a UCalendar. More...
enum | UCalendarAMPMs { UCAL_AM, UCAL_PM }
| Possible AM/PM values in a UCalendar. More...
enum | USystemTimeZoneType { UCAL_ZONE_TYPE_ANY, UCAL_ZONE_TYPE_CANONICAL, UCAL_ZONE_TYPE_CANONICAL_LOCATION }
| System time zone type constants used by filtering zones in ucal_openTimeZoneIDEnumeration. More...
enum | UCalendarDisplayNameType { UCAL_STANDARD, UCAL_SHORT_STANDARD, UCAL_DST, UCAL_SHORT_DST }
| Possible formats for a UCalendar's display name. More...
enum | UCalendarAttribute { UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, UCAL_REPEATED_WALL_TIME, UCAL_SKIPPED_WALL_TIME }
| Types of UCalendar attributes. More...
enum | UCalendarWallTimeOption { UCAL_WALLTIME_LAST, UCAL_WALLTIME_FIRST, UCAL_WALLTIME_NEXT_VALID }
| Options for handling ambiguous wall time at time zone offset transitions. More...
enum | UCalendarLimitType { UCAL_MINIMUM, UCAL_MAXIMUM, UCAL_GREATEST_MINIMUM, UCAL_LEAST_MAXIMUM, UCAL_ACTUAL_MINIMUM, UCAL_ACTUAL_MAXIMUM }
| Possible limit values for a UCalendar. More...
enum | UCalendarWeekdayType { UCAL_WEEKDAY, UCAL_WEEKEND, UCAL_WEEKEND_ONSET, UCAL_WEEKEND_CEASE }
| Weekday types, as returned by ucal_getDayOfWeekType(). More...
enum | UTimeZoneTransitionType { UCAL_TZ_TRANSITION_NEXT, UCAL_TZ_TRANSITION_NEXT_INCLUSIVE, UCAL_TZ_TRANSITION_PREVIOUS, UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE }
| Time zone transition types for ucal_getTimeZoneTransitionDate. More...

## Functions
UEnumeration * | ucal_openTimeZoneIDEnumeration (USystemTimeZoneType zoneType, const char *region, const int32_t *rawOffset, UErrorCode *ec)
| Create an enumeration over system time zone IDs with the given filter conditions. More...
UEnumeration * | ucal_openTimeZones (UErrorCode *ec)
| Create an enumeration over all time zones. More...
UEnumeration * | ucal_openCountryTimeZones (const char *country, UErrorCode *ec)
| Create an enumeration over all time zones associated with the given country. More...
int32_t | ucal_getDefaultTimeZone (UChar *result, int32_t resultCapacity, UErrorCode *ec)
| Return the default time zone. More...
void | ucal_setDefaultTimeZone (const UChar *zoneID, UErrorCode *ec)
| Set the default time zone. More...
int32_t | ucal_getHostTimeZone (UChar *result, int32_t resultCapacity, UErrorCode *ec)
| Return the current host time zone. More...
int32_t | ucal_getDSTSavings (const UChar *zoneID, UErrorCode *ec)
| Return the amount of time in milliseconds that the clock is advanced during daylight savings time for the given time zone, or zero if the time zone does not observe daylight savings time. More...
UDate | ucal_getNow (void)
| Get the current date and time. More...
UCalendar * | ucal_open (const UChar *zoneID, int32_t len, const char *locale, UCalendarType type, UErrorCode *status)
| Open a UCalendar. More...
void | ucal_close (UCalendar *cal)
| Close a UCalendar. More...
UCalendar * | ucal_clone (const UCalendar *cal, UErrorCode *status)
| Open a copy of a UCalendar. More...
void | ucal_setTimeZone (UCalendar *cal, const UChar *zoneID, int32_t len, UErrorCode *status)
| Set the TimeZone used by a UCalendar. More...
int32_t | ucal_getTimeZoneID (const UCalendar *cal, UChar *result, int32_t resultLength, UErrorCode *status)
| Get the ID of the UCalendar's time zone. More...
int32_t | ucal_getTimeZoneDisplayName (const UCalendar *cal, UCalendarDisplayNameType type, const char *locale, UChar *result, int32_t resultLength, UErrorCode *status)
| Get the display name for a UCalendar's TimeZone. More...
UBool | ucal_inDaylightTime (const UCalendar *cal, UErrorCode *status)
| Determine if a UCalendar is currently in daylight savings time. More...
void | ucal_setGregorianChange (UCalendar *cal, UDate date, UErrorCode *pErrorCode)
| Sets the GregorianCalendar change date. More...
UDate | ucal_getGregorianChange (const UCalendar *cal, UErrorCode *pErrorCode)
| Gets the Gregorian Calendar change date. More...
int32_t | ucal_getAttribute (const UCalendar *cal, UCalendarAttribute attr)
| Get a numeric attribute associated with a UCalendar. More...
void | ucal_setAttribute (UCalendar *cal, UCalendarAttribute attr, int32_t newValue)
| Set a numeric attribute associated with a UCalendar. More...
const char * | ucal_getAvailable (int32_t localeIndex)
| Get a locale for which calendars are available. More...
int32_t | ucal_countAvailable (void)
| Determine how many locales have calendars available. More...
UDate | ucal_getMillis (const UCalendar *cal, UErrorCode *status)
| Get a UCalendar's current time in millis. More...
void | ucal_setMillis (UCalendar *cal, UDate dateTime, UErrorCode *status)
| Set a UCalendar's current time in millis. More...
void | ucal_setDate (UCalendar *cal, int32_t year, int32_t month, int32_t date, UErrorCode *status)
| Set a UCalendar's current date. More...
void | ucal_setDateTime (UCalendar *cal, int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode *status)
| Set a UCalendar's current date. More...
UBool | ucal_equivalentTo (const UCalendar *cal1, const UCalendar *cal2)
| Returns TRUE if two UCalendars are equivalent. More...
void | ucal_add (UCalendar *cal, UCalendarDateFields field, int32_t amount, UErrorCode *status)
| Add a specified signed amount to a particular field in a UCalendar. More...
void | ucal_roll (UCalendar *cal, UCalendarDateFields field, int32_t amount, UErrorCode *status)
| Add a specified signed amount to a particular field in a UCalendar. More...
int32_t | ucal_get (const UCalendar *cal, UCalendarDateFields field, UErrorCode *status)
| Get the current value of a field from a UCalendar. More...
void | ucal_set (UCalendar *cal, UCalendarDateFields field, int32_t value)
| Set the value of a field in a UCalendar. More...
UBool | ucal_isSet (const UCalendar *cal, UCalendarDateFields field)
| Determine if a field in a UCalendar is set. More...
void | ucal_clearField (UCalendar *cal, UCalendarDateFields field)
| Clear a field in a UCalendar. More...
void | ucal_clear (UCalendar *calendar)
| Clear all fields in a UCalendar. More...
int32_t | ucal_getLimit (const UCalendar *cal, UCalendarDateFields field, UCalendarLimitType type, UErrorCode *status)
| Determine a limit for a field in a UCalendar. More...
const char * | ucal_getLocaleByType (const UCalendar *cal, ULocDataLocaleType type, UErrorCode *status)
| Get the locale for this calendar object. More...
const char * | ucal_getTZDataVersion (UErrorCode *status)
| Returns the timezone data version currently used by ICU. More...
int32_t | ucal_getCanonicalTimeZoneID (const UChar *id, int32_t len, UChar *result, int32_t resultCapacity, UBool *isSystemID, UErrorCode *status)
| Returns the canonical system timezone ID or the normalized custom time zone ID for the given time zone ID. More...
const char * | ucal_getType (const UCalendar *cal, UErrorCode *status)
| Get the resource keyword value string designating the calendar type for the UCalendar. More...
UEnumeration * | ucal_getKeywordValuesForLocale (const char *key, const char *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. More...
UCalendarWeekdayType | ucal_getDayOfWeekType (const UCalendar *cal, 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 UCalendar (the locale's region is often the most determinant factor). More...
int32_t | ucal_getWeekendTransition (const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode *status)
| Returns the time during the day at which the weekend begins or ends in this calendar system. More...
UBool | ucal_isWeekend (const UCalendar *cal, UDate date, UErrorCode *status)
| Returns TRUE if the given UDate is in the weekend in this calendar system. More...
int32_t | ucal_getFieldDifference (UCalendar *cal, UDate target, UCalendarDateFields field, UErrorCode *status)
| Return the difference between the target time and the time this calendar object is currently set to. More...
UBool | ucal_getTimeZoneTransitionDate (const UCalendar *cal, UTimeZoneTransitionType type, UDate *transition, UErrorCode *status)
| Get the UDate for the next/previous time zone transition relative to the calendar's current date, in the time zone to which the calendar is currently set. More...
int32_t | ucal_getWindowsTimeZoneID (const UChar *id, int32_t len, UChar *winid, int32_t winidCapacity, UErrorCode *status)
| Converts a system time zone ID to an equivalent Windows time zone ID. More...
int32_t | ucal_getTimeZoneIDForWindowsID (const UChar *winid, int32_t len, const char *region, UChar *id, int32_t idCapacity, UErrorCode *status)
| Converts a Windows time zone ID to an equivalent system time zone ID for a region. More...

## Detailed Description

C API: Calendar.

## Calendar C API

UCalendar C API is used for converting between a `UDate` object and a set of integer fields such as `UCAL_YEAR`, `UCAL_MONTH`, `UCAL_DAY`, `UCAL_HOUR`, and so on. (A `UDate` object represents a specific instant in time with millisecond precision. See UDate for information about the `UDate` .)

Types of `UCalendar` interpret a `UDate` according to the rules of a specific calendar system. The U_STABLE provides the enum UCalendarType with UCAL_TRADITIONAL and UCAL_GREGORIAN.

Like other locale-sensitive C API, calendar API provides a function, `ucal_open()`, which returns a pointer to `UCalendar` whose time fields have been initialized with the current date and time. We need to specify the type of calendar to be opened and the timezoneId.

>     UCalendar *caldef;UChar *tzId;UErrorCode status;tzId=(UChar*)malloc(sizeof(UChar) * (strlen("PST") +1) );u_uastrcpy(tzId, "PST");caldef=ucal_open(tzID, u_strlen(tzID), NULL, UCAL_TRADITIONAL, &status);

A `UCalendar` 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, two 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), or there may be inconsistent information (such as "Tuesday, July 15, 1996" – July 15, 1996 is actually a Monday).

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., UCAL_YEAR = 1970, UCAL_MONTH = JANUARY, UCAL_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.

>     UCAL_MONTH + UCAL_DAY_OF_MONTHUCAL_MONTH + UCAL_WEEK_OF_MONTH + UCAL_DAY_OF_WEEKUCAL_MONTH + UCAL_DAY_OF_WEEK_IN_MONTH + UCAL_DAY_OF_WEEKUCAL_DAY_OF_YEARUCAL_DAY_OF_WEEK + UCAL_WEEK_OF_YEAR

For the time of day:

>     UCAL_HOUR_OF_DAYUCAL_AM_PM + UCAL_HOUR

Note: for some non-Gregorian calendars, different fields may be necessary for complete disambiguation. For example, a full specification of the historical Arabic astronomical calendar requires year, month, day-of-month and day-of-week in some cases.

Note: There are certain possible ambiguities in interpretation of certain singular times, which are resolved in the following ways:

1. 24:00:00 "belongs" to the following day. That is, 23:59 on Dec 31, 1969 < 24:00 on Jan 1, 1970 < 24:01:00 on Jan 1, 1970

2. Although historically not precise, midnight also belongs to "am", and noon belongs to "pm", so on the same day, 12:00 am (midnight) < 12:01 am, and 12:00 pm (noon) < 12:01 pm

The date or time format strings are not part of the definition of a calendar, as those must be modifiable or overridable by the user at runtime. Use icu::DateFormat to format dates.

`Calendar` provides an API for field "rolling", where fields can be incremented or decremented, but wrap around. For example, rolling the month up in the date `December 12, 1996` results in `January 12, 1996`.

`Calendar` also provides a date arithmetic function for adding the specified (signed) amount of time to a particular time field. For example, subtracting 5 days from the date `September 12, 1996` results in `September 7, 1996`.

The Japanese calendar uses a combination of era name and year number. When an emperor of Japan abdicates and a new emperor ascends the throne, a new era is declared and year number is reset to 1. Even if the date of abdication is scheduled ahead of time, the new era name might not be announced until just before the date. In such case, ICU4C may include a start date of future era without actual era name, but not enabled by default. ICU4C users who want to test the behavior of the future era can enable the tentative era by:

- Environment variable `ICU_ENABLE_TENTATIVE_ERA=true`.

Stable:
  ICU 2.0

Definition in file ucal.h.

## Macro Definition Documentation

## ◆ UCAL_UNKNOWN_ZONE_ID

#define UCAL_UNKNOWN_ZONE_ID "Etc/Unknown"

The time zone ID reserved for unknown time zone.

It behaves like the GMT/UTC time zone but has the special ID "Etc/Unknown".

Stable:
  ICU 4.8

Definition at line 163 of file ucal.h.

## Typedef Documentation

## ◆ UCalendar

typedef void* UCalendar

A calendar.

For usage in C programs.

Stable:
  ICU 2.0

Definition at line 169 of file ucal.h.

## ◆ UCalendarAMPMs

typedef enum UCalendarAMPMs UCalendarAMPMs

Stable:
  ICU 2.0

Definition at line 542 of file ucal.h.

## ◆ UCalendarAttribute

typedef enum UCalendarAttribute UCalendarAttribute

Stable:
  ICU 2.0

Definition at line 959 of file ucal.h.

## ◆ UCalendarDateFields

typedef enum UCalendarDateFields UCalendarDateFields

Stable:
  ICU 2.0

Definition at line 464 of file ucal.h.

## ◆ UCalendarDaysOfWeek

typedef enum UCalendarDaysOfWeek UCalendarDaysOfWeek

Stable:
  ICU 2.0

Definition at line 491 of file ucal.h.

## ◆ UCalendarDisplayNameType

typedef enum UCalendarDisplayNameType UCalendarDisplayNameType

Stable:
  ICU 2.0

Definition at line 843 of file ucal.h.

## ◆ UCalendarLimitType

typedef enum UCalendarLimitType UCalendarLimitType

Stable:
  ICU 2.0

Definition at line 1302 of file ucal.h.

## ◆ UCalendarMonths

typedef enum UCalendarMonths UCalendarMonths

Stable:
  ICU 2.0

Definition at line 529 of file ucal.h.

## ◆ UCalendarType

typedef enum UCalendarType UCalendarType

Stable:
  ICU 2.0

Definition at line 194 of file ucal.h.

## ◆ UCalendarWallTimeOption

typedef enum UCalendarWallTimeOption UCalendarWallTimeOption

Stable:
  ICU 49

Definition at line 989 of file ucal.h.

## ◆ UCalendarWeekdayType

typedef enum UCalendarWeekdayType UCalendarWeekdayType

Stable:
  ICU 4.4

Definition at line 1426 of file ucal.h.

## ◆ USystemTimeZoneType

typedef enum USystemTimeZoneType USystemTimeZoneType

Stable:
  ICU 4.8

Definition at line 569 of file ucal.h.

## ◆ UTimeZoneTransitionType

typedef enum UTimeZoneTransitionType UTimeZoneTransitionType

Stable:
  ICU 50

Definition at line 1540 of file ucal.h.

## Enumeration Type Documentation

## ◆ UCalendarAMPMs

enum UCalendarAMPMs

Possible AM/PM values in a UCalendar.

Stable:
  ICU 2.0

Enumerator
UCAL_AM | AM.
UCAL_PM | PM.

Definition at line 534 of file ucal.h.

## ◆ UCalendarAttribute

enum UCalendarAttribute

Types of UCalendar attributes.

Stable:
  ICU 2.0

Enumerator
UCAL_LENIENT | Lenient parsing. Stable: ICU 2.0
UCAL_FIRST_DAY_OF_WEEK | First day of week. Stable: ICU 2.0
UCAL_MINIMAL_DAYS_IN_FIRST_WEEK | Minimum number of days in first week. Stable: ICU 2.0
UCAL_REPEATED_WALL_TIME | The behavior for handling wall time repeating multiple times at negative time zone offset transitions. Stable: ICU 49
UCAL_SKIPPED_WALL_TIME | The behavior for handling skipped wall time at positive time zone offset transitions. Stable: ICU 49

Definition at line 928 of file ucal.h.

## ◆ UCalendarDateFields

enum UCalendarDateFields

Possible fields in a UCalendar.

Stable:
  ICU 2.0

Enumerator
UCAL_ERA | Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar. This is a calendar-specific value. Stable: ICU 2.6
UCAL_YEAR | Field number indicating the year. This is a calendar-specific value. Stable: ICU 2.6
UCAL_MONTH | Field number indicating the month. This is a calendar-specific value. The first month of the year is `JANUARY`; the last depends on the number of months in a year. See also UCAL_JANUARY UCAL_FEBRUARY UCAL_MARCH UCAL_APRIL UCAL_MAY UCAL_JUNE UCAL_JULY UCAL_AUGUST UCAL_SEPTEMBER UCAL_OCTOBER UCAL_NOVEMBER UCAL_DECEMBER UCAL_UNDECIMBER Stable: ICU 2.6
UCAL_WEEK_OF_YEAR | Field number indicating the week number within the current year. The first week of the year, as defined by `UCAL_FIRST_DAY_OF_WEEK` and `UCAL_MINIMAL_DAYS_IN_FIRST_WEEK` attributes, has value 1. Subclasses define the value of `UCAL_WEEK_OF_YEAR` for days before the first week of the year. See also ucal_getAttribute ucal_setAttribute Stable: ICU 2.6
UCAL_WEEK_OF_MONTH | Field number indicating the week number within the current month. The first week of the month, as defined by `UCAL_FIRST_DAY_OF_WEEK` and `UCAL_MINIMAL_DAYS_IN_FIRST_WEEK` attributes, has value 1. Subclasses define the value of `WEEK_OF_MONTH` for days before the first week of the month. See also ucal_getAttribute ucal_setAttribute UCAL_FIRST_DAY_OF_WEEK UCAL_MINIMAL_DAYS_IN_FIRST_WEEK Stable: ICU 2.6
UCAL_DATE | Field number indicating the day of the month. This is a synonym for `DAY_OF_MONTH`. The first day of the month has value 1. See also UCAL_DAY_OF_MONTH Stable: ICU 2.6
UCAL_DAY_OF_YEAR | Field number indicating the day number within the current year. The first day of the year has value 1. Stable: ICU 2.6
UCAL_DAY_OF_WEEK | Field number indicating the day of the week. This field takes values `SUNDAY`, `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, and `SATURDAY`. See also UCAL_SUNDAY UCAL_MONDAY UCAL_TUESDAY UCAL_WEDNESDAY UCAL_THURSDAY UCAL_FRIDAY UCAL_SATURDAY Stable: ICU 2.6
UCAL_DAY_OF_WEEK_IN_MONTH | Field number indicating the ordinal number of the day of the week within the current month. Together with the `DAY_OF_WEEK` field, this uniquely specifies a day within a month. Unlike `WEEK_OF_MONTH` and `WEEK_OF_YEAR`, this field's value does not depend on `getFirstDayOfWeek()` or `getMinimalDaysInFirstWeek()`. `DAY_OF_MONTH 1` through `7` always correspond to `DAY_OF_WEEK_IN_MONTH 1`; `8` through `15` correspond to `DAY_OF_WEEK_IN_MONTH 2`, and so on. `DAY_OF_WEEK_IN_MONTH 0` indicates the week before `DAY_OF_WEEK_IN_MONTH 1`. Negative values count back from the end of the month, so the last Sunday of a month is specified as `DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1`. Because negative values count backward they will usually be aligned differently within the month than positive values. For example, if a month has 31 days, `DAY_OF_WEEK_IN_MONTH -1` will overlap `DAY_OF_WEEK_IN_MONTH 5` and the end of `4`. See also UCAL_DAY_OF_WEEK UCAL_WEEK_OF_MONTH Stable: ICU 2.6
UCAL_AM_PM | Field number indicating whether the `HOUR` is before or after noon. E.g., at 10:04:15.250 PM the `AM_PM` is `PM`. See also UCAL_AM UCAL_PM UCAL_HOUR Stable: ICU 2.6
UCAL_HOUR | Field number indicating the hour of the morning or afternoon. `HOUR` is used for the 12-hour clock. E.g., at 10:04:15.250 PM the `HOUR` is 10. See also UCAL_AM_PM UCAL_HOUR_OF_DAY Stable: ICU 2.6
UCAL_HOUR_OF_DAY | Field number indicating the hour of the day. `HOUR_OF_DAY` is used for the 24-hour clock. E.g., at 10:04:15.250 PM the `HOUR_OF_DAY` is 22. See also UCAL_HOUR Stable: ICU 2.6
UCAL_MINUTE | Field number indicating the minute within the hour. E.g., at 10:04:15.250 PM the `UCAL_MINUTE` is 4. Stable: ICU 2.6
UCAL_SECOND | Field number indicating the second within the minute. E.g., at 10:04:15.250 PM the `UCAL_SECOND` is 15. Stable: ICU 2.6
UCAL_MILLISECOND | Field number indicating the millisecond within the second. E.g., at 10:04:15.250 PM the `UCAL_MILLISECOND` is 250. Stable: ICU 2.6
UCAL_ZONE_OFFSET | Field number indicating the raw offset from GMT in milliseconds. Stable: ICU 2.6
UCAL_DST_OFFSET | Field number indicating the daylight savings offset in milliseconds. Stable: ICU 2.6
UCAL_YEAR_WOY | Field number indicating the extended year corresponding to the `UCAL_WEEK_OF_YEAR` field. This may be one greater or less than the value of `UCAL_EXTENDED_YEAR`. Stable: ICU 2.6
UCAL_DOW_LOCAL | Field number indicating the localized day of week. This will be a value from 1 to 7 inclusive, with 1 being the localized first day of the week. Stable: ICU 2.6
UCAL_EXTENDED_YEAR | Year of this calendar system, encompassing all supra-year fields. For example, in Gregorian/Julian calendars, positive Extended Year values indicate years AD, 1 BC = 0 extended, 2 BC = -1 extended, and so on. Stable: ICU 2.8
UCAL_JULIAN_DAY | Field number indicating the modified Julian day number. This is different from the conventional Julian day number in two regards. First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number; that is, it depends on the local time zone. It can be thought of as a single number that encompasses all the date-related fields. Stable: ICU 2.8
UCAL_MILLISECONDS_IN_DAY | Ranges from 0 to 23:59:59.999 (regardless of DST). This field behaves exactly like a composite of all time-related fields, not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This reflects the fact that it must be combined with the DST_OFFSET field to obtain a unique local time value. Stable: ICU 2.8
UCAL_IS_LEAP_MONTH | Whether or not the current month is a leap month (0 or 1). See the Chinese calendar for an example of this.
UCAL_FIELD_COUNT | One more than the highest normal UCalendarDateFields value. Deprecated: ICU 58 The numeric value may change over time, see ICU ticket #12420.
UCAL_DAY_OF_MONTH | Field number indicating the day of the month. This is a synonym for `UCAL_DATE`. The first day of the month has value 1. See also UCAL_DATE Synonym for UCAL_DATE Stable: ICU 2.8

Definition at line 199 of file ucal.h.

## ◆ UCalendarDaysOfWeek

enum UCalendarDaysOfWeek

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., UCAL_SUNDAY. Possible days of the week in a UCalendar

Stable:
  ICU 2.0

Enumerator
UCAL_SUNDAY | Sunday.
UCAL_MONDAY | Monday.
UCAL_TUESDAY | Tuesday.
UCAL_WEDNESDAY | Wednesday.
UCAL_THURSDAY | Thursday.
UCAL_FRIDAY | Friday.
UCAL_SATURDAY | Saturday.

Definition at line 473 of file ucal.h.

## ◆ UCalendarDisplayNameType

enum UCalendarDisplayNameType

Possible formats for a UCalendar's display name.

Stable:
  ICU 2.0

Enumerator
UCAL_STANDARD | Standard display name.
UCAL_SHORT_STANDARD | Short standard display name.
UCAL_DST | Daylight savings display name.
UCAL_SHORT_DST | Short daylight savings display name.

Definition at line 831 of file ucal.h.

## ◆ UCalendarLimitType

enum UCalendarLimitType

Possible limit values for a UCalendar.

Stable:
  ICU 2.0

Enumerator
UCAL_MINIMUM | Minimum value.
UCAL_MAXIMUM | Maximum value.
UCAL_GREATEST_MINIMUM | Greatest minimum value.
UCAL_LEAST_MAXIMUM | Leaest maximum value.
UCAL_ACTUAL_MINIMUM | Actual minimum value.
UCAL_ACTUAL_MAXIMUM | Actual maximum value.

Definition at line 1286 of file ucal.h.

## ◆ UCalendarMonths

enum UCalendarMonths

Possible months in a UCalendar.

Note: Calendar month is 0-based.

Stable:
  ICU 2.0

Enumerator
UCAL_JANUARY | January.
UCAL_FEBRUARY | February.
UCAL_MARCH | March.
UCAL_APRIL | April.
UCAL_MAY | May.
UCAL_JUNE | June.
UCAL_JULY | July.
UCAL_AUGUST | August.
UCAL_SEPTEMBER | September.
UCAL_OCTOBER | October.
UCAL_NOVEMBER | November.
UCAL_DECEMBER | December.
UCAL_UNDECIMBER | Value of the `UCAL_MONTH` field indicating the thirteenth month of the year. Although the Gregorian calendar does not use this value, lunar calendars do.

Definition at line 496 of file ucal.h.

## ◆ UCalendarType

enum UCalendarType

Possible types of UCalendars.

Stable:
  ICU 2.0

Enumerator
UCAL_TRADITIONAL | Despite the name, UCAL_TRADITIONAL designates the locale's default calendar, which may be the Gregorian calendar or some other calendar. Stable: ICU 2.0
UCAL_DEFAULT | A better name for UCAL_TRADITIONAL. Stable: ICU 4.2
UCAL_GREGORIAN | Unambiguously designates the Gregorian calendar for the locale. Stable: ICU 2.0

Definition at line 174 of file ucal.h.

## ◆ UCalendarWallTimeOption

enum UCalendarWallTimeOption

Options for handling ambiguous wall time at time zone offset transitions.

Stable:
  ICU 49

Enumerator
UCAL_WALLTIME_LAST | An ambiguous wall time to be interpreted as the latest. This option is valid for UCAL_REPEATED_WALL_TIME and UCAL_SKIPPED_WALL_TIME. Stable: ICU 49
UCAL_WALLTIME_FIRST | An ambiguous wall time to be interpreted as the earliest. This option is valid for UCAL_REPEATED_WALL_TIME and UCAL_SKIPPED_WALL_TIME. Stable: ICU 49
UCAL_WALLTIME_NEXT_VALID | An ambiguous wall time to be interpreted as the next valid wall time. This option is valid for UCAL_SKIPPED_WALL_TIME. Stable: ICU 49

Definition at line 966 of file ucal.h.

## ◆ UCalendarWeekdayType

enum UCalendarWeekdayType

Weekday types, as returned by ucal_getDayOfWeekType().

Stable:
  ICU 4.4

Enumerator
UCAL_WEEKDAY | Designates a full weekday (no part of the day is included in the weekend). Stable: ICU 4.4
UCAL_WEEKEND | Designates a full weekend day (the entire day is included in the weekend). Stable: ICU 4.4
UCAL_WEEKEND_ONSET | Designates a day that starts as a weekday and transitions to the weekend. Call ucal_getWeekendTransition() to get the time of transition. Stable: ICU 4.4
UCAL_WEEKEND_CEASE | Designates a day that starts as the weekend and transitions to a weekday. Call ucal_getWeekendTransition() to get the time of transition. Stable: ICU 4.4

Definition at line 1400 of file ucal.h.

## ◆ USystemTimeZoneType

enum USystemTimeZoneType

System time zone type constants used by filtering zones in ucal_openTimeZoneIDEnumeration.

See also
  ucal_openTimeZoneIDEnumeration

Stable:
  ICU 4.8

Enumerator
UCAL_ZONE_TYPE_ANY | Any system zones. Stable: ICU 4.8
UCAL_ZONE_TYPE_CANONICAL | Canonical system zones. Stable: ICU 4.8
UCAL_ZONE_TYPE_CANONICAL_LOCATION | Canonical system zones associated with actual locations. Stable: ICU 4.8

Definition at line 550 of file ucal.h.

## ◆ UTimeZoneTransitionType

enum UTimeZoneTransitionType

Time zone transition types for ucal_getTimeZoneTransitionDate.

Stable:
  ICU 50

Enumerator
UCAL_TZ_TRANSITION_NEXT | Get the next transition after the current date, i.e. excludes the current date Stable: ICU 50
UCAL_TZ_TRANSITION_NEXT_INCLUSIVE | Get the next transition on or after the current date, i.e. may include the current date Stable: ICU 50
UCAL_TZ_TRANSITION_PREVIOUS | Get the previous transition before the current date, i.e. excludes the current date Stable: ICU 50
UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE | Get the previous transition on or before the current date, i.e. may include the current date Stable: ICU 50

Definition at line 1513 of file ucal.h.

## Function Documentation

## ◆ ucal_add()

void ucal_add | ( | UCalendar * | cal,
|  | UCalendarDateFields | field,
|  | int32_t | amount,
|  | UErrorCode * | status
| ) |  |

Add a specified signed amount to a particular field in a UCalendar.

This can modify more significant fields in the calendar. 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

  cal | The UCalendar to which to add.
  field | The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
  amount | The signed amount to add to field. If the amount causes the value to exceed to maximum or minimum values for that field, other fields are modified to preserve the magnitude of the change.
  status | A pointer to an UErrorCode to receive any errors

See also
  ucal_roll

Stable:
  ICU 2.0

## ◆ ucal_clear()

void ucal_clear | ( | UCalendar * | calendar | ) |

Clear all fields in a UCalendar.

All fields are represented as 32-bit integers.

Parameters

  calendar | The UCalendar to clear.

See also
  ucal_get
  ucal_set
  ucal_isSet
  ucal_clearField

Stable:
  ICU 2.0

## ◆ ucal_clearField()

void ucal_clearField | ( | UCalendar * | cal,
|  | UCalendarDateFields | field
| ) |  |

Clear a field in a UCalendar.

All fields are represented as 32-bit integers.

Parameters

  cal | The UCalendar containing the field to clear.
  field | The field to clear; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.

See also
  ucal_get
  ucal_set
  ucal_isSet
  ucal_clear

Stable:
  ICU 2.0

## ◆ ucal_clone()

UCalendar* ucal_clone | ( | const UCalendar * | cal,
|  | UErrorCode * | status
| ) |  |

Open a copy of a UCalendar.

This function performs a deep copy.

Parameters

  cal | The calendar to copy
  status | A pointer to an UErrorCode to receive any errors.

Returns
  A pointer to a UCalendar identical to cal.

Stable:
  ICU 4.0

## ◆ ucal_close()

void ucal_close | ( | UCalendar * | cal | ) |

Close a UCalendar.

Once closed, a UCalendar may no longer be used.

Parameters

  cal | The UCalendar to close.

Stable:
  ICU 2.0

## ◆ ucal_countAvailable()

int32_t ucal_countAvailable | ( | void |  | ) |

Determine how many locales have calendars available.

This function is most useful as determining the loop ending condition for calls to ucal_getAvailable.

Returns
  The number of locales for which calendars are available.

See also
  ucal_getAvailable

Stable:
  ICU 2.0

## ◆ ucal_equivalentTo()

UBool ucal_equivalentTo | ( | const UCalendar * | cal1,
|  | const UCalendar * | cal2
| ) |  |

Returns TRUE if two UCalendars are equivalent.

Equivalent UCalendars will behave identically, but they may be set to different times.

Parameters

  cal1 | The first of the UCalendars to compare.
  cal2 | The second of the UCalendars to compare.

Returns
  TRUE if cal1 and cal2 are equivalent, FALSE otherwise.

Stable:
  ICU 2.0

## ◆ ucal_get()

int32_t ucal_get | ( | const UCalendar * | cal,
|  | UCalendarDateFields | field,
|  | UErrorCode * | status
| ) |  |

Get the current value of a field from a UCalendar.

All fields are represented as 32-bit integers.

Parameters

  cal | The UCalendar to query.
  field | The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
  status | A pointer to an UErrorCode to receive any errors

Returns
  The value of the desired field.

See also
  ucal_set
  ucal_isSet
  ucal_clearField
  ucal_clear

Stable:
  ICU 2.0

## ◆ ucal_getAttribute()

int32_t ucal_getAttribute | ( | const UCalendar * | cal,
|  | UCalendarAttribute | attr
| ) |  |

Get a numeric attribute associated with a UCalendar.

Numeric attributes include the first day of the week, or the minimal numbers of days in the first week of the month.

Parameters

  cal | The UCalendar to query.
  attr | The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, UCAL_REPEATED_WALL_TIME or UCAL_SKIPPED_WALL_TIME

Returns
  The value of attr.

See also
  ucal_setAttribute

Stable:
  ICU 2.0

## ◆ ucal_getAvailable()

const char* ucal_getAvailable | ( | int32_t | localeIndex | ) |

Get a locale for which calendars are available.

A UCalendar in a locale returned by this function will contain the correct day and month names for the locale.

Parameters

  localeIndex | The index of the desired locale.

Returns
  A locale for which calendars are available, or 0 if none.

See also
  ucal_countAvailable

Stable:
  ICU 2.0

## ◆ ucal_getCanonicalTimeZoneID()

int32_t ucal_getCanonicalTimeZoneID | ( | const UChar * | id,
|  | int32_t | len,
|  | UChar * | result,
|  | int32_t | resultCapacity,
|  | UBool * | isSystemID,
|  | UErrorCode * | status
| ) |  |

Returns the canonical system timezone ID or the normalized custom time zone ID for the given time zone ID.

Parameters

  id | The input timezone ID to be canonicalized.
  len | The length of id, or -1 if null-terminated.
  result | The buffer receives the canonical system timezone ID or the custom timezone ID in normalized format.
  resultCapacity | The capacity of the result buffer.
  isSystemID | Receives if the given ID is a known system timezone ID.
  status | Receives the status. When the given timezone ID is neither a known system time zone ID nor a valid custom timezone ID, U_ILLEGAL_ARGUMENT_ERROR is set.

Returns
  The result string length, not including the terminating null.

Stable:
  ICU 4.0

## ◆ ucal_getDayOfWeekType()

UCalendarWeekdayType ucal_getDayOfWeekType | ( | const UCalendar * | cal,
|  | 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 UCalendar (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 function ucal_getWeekendTransition() will return the point of transition.

Parameters

  cal | The UCalendar to query.
  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.

Stable:
  ICU 4.4

## ◆ ucal_getDefaultTimeZone()

int32_t ucal_getDefaultTimeZone | ( | UChar * | result,
|  | int32_t | resultCapacity,
|  | UErrorCode * | ec
| ) |  |

Return the default time zone.

The default is determined initially by querying the host operating system. If the host system detection routines fail, or if they specify a TimeZone or TimeZone offset which is not recognized, then the special TimeZone "Etc/Unknown" is returned.

The default may be changed with `ucal_setDefaultTimeZone()` or with the C++ TimeZone API, `TimeZone::adoptDefault(TimeZone*)`.

Parameters

  result | A buffer to receive the result, or NULL
  resultCapacity | The capacity of the result buffer
  ec | input/output error code

Returns
  The result string length, not including the terminating null

See also
  UCAL_UNKNOWN_ZONE_ID

Stable:
  ICU 2.6

## ◆ ucal_getDSTSavings()

int32_t ucal_getDSTSavings | ( | const UChar * | zoneID,
|  | UErrorCode * | ec
| ) |  |

Return the amount of time in milliseconds that the clock is advanced during daylight savings time for the given time zone, or zero if the time zone does not observe daylight savings time.

Parameters

  zoneID | null-terminated time zone ID
  ec | input/output error code

Returns
  the number of milliseconds the time is advanced with respect to standard time when the daylight savings rules are in effect. This is always a non-negative number, most commonly either 3,600,000 (one hour) or zero.

Stable:
  ICU 2.6

## ◆ ucal_getFieldDifference()

int32_t ucal_getFieldDifference | ( | UCalendar * | cal,
|  | UDate | target,
|  | UCalendarDateFields | field,
|  | UErrorCode * | status
| ) |  |

Return the difference between the target time and the time this calendar object is currently set to.

If the target time is after the current calendar setting, the the returned value will be positive. The field parameter specifies the units of the return value. For example, if field is UCAL_MONTH and ucal_getFieldDifference returns 3, then the target time is 3 to less than 4 months after the current calendar setting.

As a side effect of this call, this calendar is advanced toward target by the given amount. That is, calling this function has the side effect of calling ucal_add on this calendar with the specified field and an amount equal to the return value from this function.

A typical way of using this function is to call it first with the largest field of interest, then with progressively smaller fields.

Parameters

  cal | The UCalendar to compare and update.
  target | The target date to compare to the current calendar setting.
  field | The field to compare; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
  status | A pointer to an UErrorCode to receive any errors

Returns
  The date difference for the specified field.

Stable:
  ICU 4.8

## ◆ ucal_getGregorianChange()

UDate ucal_getGregorianChange | ( | const UCalendar * | cal,
|  | UErrorCode * | pErrorCode
| ) |  |

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.

This function works only for Gregorian calendars. If the UCalendar is not an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR error code is set.

Parameters

  cal | The calendar object.
  pErrorCode | Pointer to a standard ICU error code. Its input value must pass the U_SUCCESS() test, or else the function returns immediately. Check for U_FAILURE() on output or use with function chaining. (See User Guide for details.)

Returns
  The Gregorian cutover time for this calendar.

See also
  GregorianCalendar::getGregorianChange
  ucal_setGregorianChange

Stable:
  ICU 3.6

## ◆ ucal_getHostTimeZone()

int32_t ucal_getHostTimeZone | ( | UChar * | result,
|  | int32_t | resultCapacity,
|  | UErrorCode * | ec
| ) |  |

Return the current host time zone.

The host time zone is detected from the current host system configuration by querying the host operating system. If the host system detection routines fail, or if they specify a TimeZone or TimeZone offset which is not recognized, then the special TimeZone "Etc/Unknown" is returned.

Note that host time zone and the ICU default time zone can be different.

The ICU default time zone does not change once initialized unless modified by calling `ucal_setDefaultTimeZone()` or with the C++ TimeZone API, `TimeZone::adoptDefault(TimeZone*)`.

If the host operating system configuration has changed since ICU has initialized then the returned value can be different than the ICU default time zone, even if the default has not changed.

This function is not thread safe.

Parameters

  result | A buffer to receive the result, or NULL
  resultCapacity | The capacity of the result buffer
  ec | input/output error code

Returns
  The result string length, not including the terminating null

See also
  UCAL_UNKNOWN_ZONE_ID

Draft:
  This API may be changed in the future versions and was introduced in ICU 65

## ◆ ucal_getKeywordValuesForLocale()

UEnumeration* ucal_getKeywordValuesForLocale | ( | const char * | key,
|  | const char * | 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 | error status

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

Stable:
  ICU 4.2

## ◆ ucal_getLimit()

int32_t ucal_getLimit | ( | const UCalendar * | cal,
|  | UCalendarDateFields | field,
|  | UCalendarLimitType | type,
|  | UErrorCode * | status
| ) |  |

Determine a limit for a field in a UCalendar.

A limit is a maximum or minimum value for a field.

Parameters

  cal | The UCalendar to query.
  field | The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
  type | The desired critical point; one of UCAL_MINIMUM, UCAL_MAXIMUM, UCAL_GREATEST_MINIMUM, UCAL_LEAST_MAXIMUM, UCAL_ACTUAL_MINIMUM, UCAL_ACTUAL_MAXIMUM
  status | A pointer to an UErrorCode to receive any errors.

Returns
  The requested value.

Stable:
  ICU 2.0

## ◆ ucal_getLocaleByType()

const char* ucal_getLocaleByType | ( | const UCalendar * | cal,
|  | ULocDataLocaleType | type,
|  | UErrorCode * | status
| ) |  |

Get the locale for this calendar object.

You can choose between valid and actual locale.

Parameters

  cal | The calendar object
  type | type of the locale we're looking for (valid or actual)
  status | error code for the operation

Returns
  the locale name

Stable:
  ICU 2.8

## ◆ ucal_getMillis()

UDate ucal_getMillis | ( | const UCalendar * | cal,
|  | UErrorCode * | status
| ) |  |

Get a UCalendar's current time in millis.

The time is represented as milliseconds from the epoch.

Parameters

  cal | The UCalendar to query.
  status | A pointer to an UErrorCode to receive any errors

Returns
  The calendar's current time in millis.

See also
  ucal_setMillis
  ucal_setDate
  ucal_setDateTime

Stable:
  ICU 2.0

## ◆ ucal_getNow()

UDate ucal_getNow | ( | void |  | ) |

Get the current date and time.

The value returned is represented as milliseconds from the epoch.

Returns
  The current date and time.

Stable:
  ICU 2.0

## ◆ ucal_getTimeZoneDisplayName()

int32_t ucal_getTimeZoneDisplayName | ( | const UCalendar * | cal,
|  | UCalendarDisplayNameType | type,
|  | const char * | locale,
|  | UChar * | result,
|  | int32_t | resultLength,
|  | UErrorCode * | status
| ) |  |

Get the display name for a UCalendar's TimeZone.

A display name is suitable for presentation to a user.

Parameters

  cal | The UCalendar to query.
  type | The desired display name format; one of UCAL_STANDARD, UCAL_SHORT_STANDARD, UCAL_DST, UCAL_SHORT_DST
  locale | The desired locale for the display name.
  result | A pointer to a buffer to receive the formatted number.
  resultLength | The maximum size of result.
  status | A pointer to an UErrorCode to receive any errors

Returns
  The total buffer size needed; if greater than resultLength, the output was truncated.

Stable:
  ICU 2.0

## ◆ ucal_getTimeZoneID()

int32_t ucal_getTimeZoneID | ( | const UCalendar * | cal,
|  | UChar * | result,
|  | int32_t | resultLength,
|  | UErrorCode * | status
| ) |  |

Get the ID of the UCalendar's time zone.

Parameters

  cal | The UCalendar to query.
  result | Receives the UCalendar's time zone ID.
  resultLength | The maximum size of result.
  status | Receives the status.

Returns
  The total buffer size needed; if greater than resultLength, the output was truncated.

Stable:
  ICU 51

## ◆ ucal_getTimeZoneIDForWindowsID()

int32_t ucal_getTimeZoneIDForWindowsID | ( | const UChar * | winid,
|  | int32_t | len,
|  | const char * | region,
|  | UChar * | id,
|  | int32_t | idCapacity,
|  | UErrorCode * | status
| ) |  |

Converts a Windows time zone ID to an equivalent system time zone ID for a region.

For example, system time zone ID "America/Los_Angeles" is returned for input Windows ID "Pacific Standard Time" and region "US" (or `null`), "America/Vancouver" is returned for the same Windows ID "Pacific Standard Time" and region "CA".

Not all Windows time zones can be mapped to system time zones. When the input Windows time zone ID is unknown or unmappable to a system time zone, then this function returns 0 as the result length, but the operation itself remains successful (no error status set on return).

This implementation utilizes Zone-Tzid mapping data. The mapping data is updated time to time. To get the latest changes, please read the ICU user guide section Updating the Time Zone Data.

Parameters

  winid | A Windows time zone ID.
  len | The length of `winid`, or -1 if null-terminated.
  region | A null-terminated region code, or `NULL` if no regional preference.
  id | A buffer to receive a system time zone ID.
  idCapacity | The capacity of the result buffer `id`.
  status | Receives the status.

Returns
  The result string length, not including the terminating null.

See also
  ucal_getWindowsTimeZoneID

Stable:
  ICU 52

## ◆ ucal_getTimeZoneTransitionDate()

UBool ucal_getTimeZoneTransitionDate | ( | const UCalendar * | cal,
|  | UTimeZoneTransitionType | type,
|  | UDate * | transition,
|  | UErrorCode * | status
| ) |  |

Get the UDate for the next/previous time zone transition relative to the calendar's current date, in the time zone to which the calendar is currently set.

If there is no known time zone transition of the requested type relative to the calendar's date, the function returns FALSE.

Parameters

  cal | The UCalendar to query.
  type | The type of transition desired.
  transition | A pointer to a UDate to be set to the transition time. If the function returns FALSE, the value set is unspecified.
  status | A pointer to a UErrorCode to receive any errors.

Returns
  TRUE if a valid transition time is set in *transition, FALSE otherwise.

Stable:
  ICU 50

## ◆ ucal_getType()

const char* ucal_getType | ( | const UCalendar * | cal,
|  | UErrorCode * | status
| ) |  |

Get the resource keyword value string designating the calendar type for the UCalendar.

Parameters

  cal | The UCalendar to query.
  status | The error code for the operation.

Returns
  The resource keyword value string.

Stable:
  ICU 4.2

## ◆ ucal_getTZDataVersion()

const char* ucal_getTZDataVersion | ( | UErrorCode * | status | ) |

Returns the timezone data version currently used by ICU.

Parameters

  status | error code for the operation

Returns
  the version string, such as "2007f"

Stable:
  ICU 3.8

## ◆ ucal_getWeekendTransition()

int32_t ucal_getWeekendTransition | ( | const UCalendar * | cal,
|  | UCalendarDaysOfWeek | dayOfWeek,
|  | UErrorCode * | status
| ) |  |

Returns the time during the day at which the weekend begins or ends in this calendar system.

If ucal_getDayOfWeekType() returns UCAL_WEEKEND_ONSET for the specified dayOfWeek, return the time at which the weekend begins. If ucal_getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek, return the time at which the weekend ends. If ucal_getDayOfWeekType() returns some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition (U_ILLEGAL_ARGUMENT_ERROR).

Parameters

  cal | The UCalendar to query.
  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.

Stable:
  ICU 4.4

## ◆ ucal_getWindowsTimeZoneID()

int32_t ucal_getWindowsTimeZoneID | ( | const UChar * | id,
|  | int32_t | len,
|  | UChar * | winid,
|  | int32_t | winidCapacity,
|  | UErrorCode * | status
| ) |  |

Converts a system time zone ID to an equivalent Windows time zone ID.

For example, Windows time zone ID "Pacific Standard Time" is returned for input "America/Los_Angeles".

There are system time zones that cannot be mapped to Windows zones. When the input system time zone ID is unknown or unmappable to a Windows time zone, then this function returns 0 as the result length, but the operation itself remains successful (no error status set on return).

This implementation utilizes Zone-Tzid mapping data. The mapping data is updated time to time. To get the latest changes, please read the ICU user guide section Updating the Time Zone Data.

Parameters

  id | A system time zone ID.
  len | The length of `id`, or -1 if null-terminated.
  winid | A buffer to receive a Windows time zone ID.
  winidCapacity | The capacity of the result buffer `winid`.
  status | Receives the status.

Returns
  The result string length, not including the terminating null.

See also
  ucal_getTimeZoneIDForWindowsID

Stable:
  ICU 52

## ◆ ucal_inDaylightTime()

UBool ucal_inDaylightTime | ( | const UCalendar * | cal,
|  | UErrorCode * | status
| ) |  |

Determine if a UCalendar is currently in daylight savings time.

Daylight savings time is not used in all parts of the world.

Parameters

  cal | The UCalendar to query.
  status | A pointer to an UErrorCode to receive any errors

Returns
  TRUE if cal is currently in daylight savings time, FALSE otherwise

Stable:
  ICU 2.0

## ◆ ucal_isSet()

UBool ucal_isSet | ( | const UCalendar * | cal,
|  | UCalendarDateFields | field
| ) |  |

Determine if a field in a UCalendar is set.

All fields are represented as 32-bit integers.

Parameters

  cal | The UCalendar to query.
  field | The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.

Returns
  TRUE if field is set, FALSE otherwise.

See also
  ucal_get
  ucal_set
  ucal_clearField
  ucal_clear

Stable:
  ICU 2.0

## ◆ ucal_isWeekend()

UBool ucal_isWeekend | ( | const UCalendar * | cal,
|  | UDate | date,
|  | UErrorCode * | status
| ) |  |

Returns TRUE if the given UDate is in the weekend in this calendar system.

Parameters

  cal | The UCalendar to query.
  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.

Stable:
  ICU 4.4

## ◆ ucal_open()

UCalendar* ucal_open | ( | const UChar * | zoneID,
|  | int32_t | len,
|  | const char * | locale,
|  | UCalendarType | type,
|  | UErrorCode * | status
| ) |  |

Open a UCalendar.

A UCalendar may be used to convert a millisecond value to a year, month, and day.

Note: When unknown TimeZone ID is specified or if the TimeZone ID specified is "Etc/Unknown", the UCalendar returned by the function is initialized with GMT zone with TimeZone ID `UCAL_UNKNOWN_ZONE_ID` ("Etc/Unknown") without any errors/warnings. If you want to check if a TimeZone ID is valid prior to this function, use `ucal_getCanonicalTimeZoneID`.

Parameters

  zoneID | The desired TimeZone ID. If 0, use the default time zone.
  len | The length of zoneID, or -1 if null-terminated.
  locale | The desired locale
  type | The type of UCalendar to open. This can be UCAL_GREGORIAN to open the Gregorian calendar for the locale, or UCAL_DEFAULT to open the default calendar for the locale (the default calendar may also be Gregorian). To open a specific non-Gregorian calendar for the locale, use uloc_setKeywordValue to set the value of the calendar keyword for the locale and then pass the locale to ucal_open with UCAL_DEFAULT as the type.
  status | A pointer to an UErrorCode to receive any errors

Returns
  A pointer to a UCalendar, or 0 if an error occurred.

See also
  UCAL_UNKNOWN_ZONE_ID

Stable:
  ICU 2.0

## ◆ ucal_openCountryTimeZones()

UEnumeration* ucal_openCountryTimeZones | ( | const char * | country,
|  | UErrorCode * | ec
| ) |  |

Create an enumeration over all time zones associated with the given country.

Some zones are affiliated with no country (e.g., "UTC"); these may also be retrieved, as a group.

Parameters

  country | the ISO 3166 two-letter country code, or NULL to retrieve zones not affiliated with any country
  ec | input/output error code

Returns
  an enumeration object that the caller must dispose of using uenum_close(), or NULL upon failure. In case of failure *ec will indicate the error.

Stable:
  ICU 2.6

## ◆ ucal_openTimeZoneIDEnumeration()

UEnumeration* ucal_openTimeZoneIDEnumeration | ( | USystemTimeZoneType | zoneType,
|  | const char * | region,
|  | const int32_t * | rawOffset,
|  | UErrorCode * | ec
| ) |  |

Create an enumeration over system time zone IDs with the given filter conditions.

Parameters

  zoneType | The system time zone type.
  region | The ISO 3166 two-letter country code or UN M.49 three-digit area code. When NULL, no filtering done by region.
  rawOffset | An offset from GMT in milliseconds, ignoring the effect of daylight savings time, if any. When NULL, no filtering done by zone offset.
  ec | A pointer to an UErrorCode to receive any errors

Returns
  an enumeration object that the caller must dispose of using enum_close(), or NULL upon failure. In case of failure, *ec will indicate the error.

Stable:
  ICU 4.8

## ◆ ucal_openTimeZones()

UEnumeration* ucal_openTimeZones | ( | UErrorCode * | ec | ) |

Create an enumeration over all time zones.

Parameters

  ec | input/output error code

Returns
  an enumeration object that the caller must dispose of using uenum_close(), or NULL upon failure. In case of failure *ec will indicate the error.

Stable:
  ICU 2.6

## ◆ ucal_roll()

void ucal_roll | ( | UCalendar * | cal,
|  | UCalendarDateFields | field,
|  | int32_t | amount,
|  | UErrorCode * | status
| ) |  |

Add a specified signed amount to a particular field in a UCalendar.

This will not modify more significant fields in the calendar. Rolling by a positive value always means moving 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).

Parameters

  cal | The UCalendar to which to add.
  field | The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
  amount | The signed amount to add to field. If the amount causes the value to exceed to maximum or minimum values for that field, the field is pinned to a permissible value.
  status | A pointer to an UErrorCode to receive any errors

See also
  ucal_add

Stable:
  ICU 2.0

## ◆ ucal_set()

void ucal_set | ( | UCalendar * | cal,
|  | UCalendarDateFields | field,
|  | int32_t | value
| ) |  |

Set the value of a field in a UCalendar.

All fields are represented as 32-bit integers.

Parameters

  cal | The UCalendar to set.
  field | The field to set; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
  value | The desired value of field.

See also
  ucal_get
  ucal_isSet
  ucal_clearField
  ucal_clear

Stable:
  ICU 2.0

## ◆ ucal_setAttribute()

void ucal_setAttribute | ( | UCalendar * | cal,
|  | UCalendarAttribute | attr,
|  | int32_t | newValue
| ) |  |

Set a numeric attribute associated with a UCalendar.

Numeric attributes include the first day of the week, or the minimal numbers of days in the first week of the month.

Parameters

  cal | The UCalendar to set.
  attr | The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, UCAL_REPEATED_WALL_TIME or UCAL_SKIPPED_WALL_TIME
  newValue | The new value of attr.

See also
  ucal_getAttribute

Stable:
  ICU 2.0

## ◆ ucal_setDate()

void ucal_setDate | ( | UCalendar * | cal,
|  | int32_t | year,
|  | int32_t | month,
|  | int32_t | date,
|  | UErrorCode * | status
| ) |  |

Set a UCalendar's current date.

The date is represented as a series of 32-bit integers.

Parameters

  cal | The UCalendar to set.
  year | The desired year.
  month | The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY, UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
  date | The desired day of the month.
  status | A pointer to an UErrorCode to receive any errors

See also
  ucal_getMillis
  ucal_setMillis
  ucal_setDateTime

Stable:
  ICU 2.0

## ◆ ucal_setDateTime()

void ucal_setDateTime | ( | UCalendar * | cal,
|  | int32_t | year,
|  | int32_t | month,
|  | int32_t | date,
|  | int32_t | hour,
|  | int32_t | minute,
|  | int32_t | second,
|  | UErrorCode * | status
| ) |  |

Set a UCalendar's current date.

The date is represented as a series of 32-bit integers.

Parameters

  cal | The UCalendar to set.
  year | The desired year.
  month | The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY, UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
  date | The desired day of the month.
  hour | The desired hour of day.
  minute | The desired minute.
  second | The desirec second.
  status | A pointer to an UErrorCode to receive any errors

See also
  ucal_getMillis
  ucal_setMillis
  ucal_setDate

Stable:
  ICU 2.0

## ◆ ucal_setDefaultTimeZone()

void ucal_setDefaultTimeZone | ( | const UChar * | zoneID,
|  | UErrorCode * | ec
| ) |  |

Set the default time zone.

Parameters

  zoneID | null-terminated time zone ID
  ec | input/output error code

Stable:
  ICU 2.6

## ◆ ucal_setGregorianChange()

void ucal_setGregorianChange | ( | UCalendar * | cal,
|  | UDate | date,
|  | UErrorCode * | pErrorCode
| ) |  |

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.

This function works only for Gregorian calendars. If the UCalendar is not an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR error code is set.

Parameters

  cal | The calendar object.
  date | The given Gregorian cutover date.
  pErrorCode | Pointer to a standard ICU error code. Its input value must pass the U_SUCCESS() test, or else the function returns immediately. Check for U_FAILURE() on output or use with function chaining. (See User Guide for details.)

See also
  GregorianCalendar::setGregorianChange
  ucal_getGregorianChange

Stable:
  ICU 3.6

## ◆ ucal_setMillis()

void ucal_setMillis | ( | UCalendar * | cal,
|  | UDate | dateTime,
|  | UErrorCode * | status
| ) |  |

Set a UCalendar's current time in millis.

The time is represented as milliseconds from the epoch.

Parameters

  cal | The UCalendar to set.
  dateTime | The desired date and time.
  status | A pointer to an UErrorCode to receive any errors

See also
  ucal_getMillis
  ucal_setDate
  ucal_setDateTime

Stable:
  ICU 2.0

## ◆ ucal_setTimeZone()

void ucal_setTimeZone | ( | UCalendar * | cal,
|  | const UChar * | zoneID,
|  | int32_t | len,
|  | UErrorCode * | status
| ) |  |

Set the TimeZone used by a UCalendar.

A UCalendar uses a timezone for converting from Greenwich time to local time.

Parameters

  cal | The UCalendar to set.
  zoneID | The desired TimeZone ID. If 0, use the default time zone.
  len | The length of zoneID, or -1 if null-terminated.
  status | A pointer to an UErrorCode to receive any errors.

Stable:
  ICU 2.0