X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/f3c0d7a59d99c2a94c6b8822291f0e42be3773c9..HEAD:/icuSources/i18n/unicode/calendar.h
diff --git a/icuSources/i18n/unicode/calendar.h b/icuSources/i18n/unicode/calendar.h
index 2beef715..0ce11898 100644
--- a/icuSources/i18n/unicode/calendar.h
+++ b/icuSources/i18n/unicode/calendar.h
@@ -29,8 +29,10 @@
#include "unicode/utypes.h"
+#if U_SHOW_CPLUSPLUS_API
+
/**
- * \file
+ * \file
* \brief C++ API: Calendar object
*/
#if !UCONFIG_NO_FORMATTING
@@ -41,7 +43,6 @@
#include "unicode/ucal.h"
#include "unicode/umisc.h"
-#if U_SHOW_CPLUSPLUS_API
U_NAMESPACE_BEGIN
class ICUServiceFactory;
@@ -53,83 +54,64 @@ typedef int32_t UFieldResolutionTable[12][8];
class BasicTimeZone;
/**
- * 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
+ * `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.)
+ * for information about the `UDate` class.)
*
- *
- * Subclasses of Calendar
interpret a UDate
+ * 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 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. + * **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
+ * 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:
- * \htmlonly
\endhtmlonly - *\endhtmlonly * - *- * Calendar *rightNow = Calendar::createInstance(errCode); - *- * \htmlonly
- * A Calendar
object can produce all the time field values
+ * 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
+ * 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),
+ * `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 + * **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 + * **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. * - * \htmlonly
\endhtmlonly - *\endhtmlonly + * 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: * - * \htmlonly- * 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 - *- * \htmlonly
\endhtmlonly - *\endhtmlonly + * HOUR_OF_DAY + * AM_PM + HOUR * - *- * HOUR_OF_DAY - * AM_PM + HOUR - *- * \htmlonly
- * Ambiguous Wall Clock Time. When time offset from UTC has + * **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 @@ -138,71 +120,73 @@ class BasicTimeZone; * 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 + * + * 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 + * Ambiguous wall clock time resolution behaviors can be customized by Calendar APIs * {@link #setRepeatedWallTimeOption} and {@link #setSkippedWallTimeOption}. * These methods are available in ICU 49 or later versions. * - *
- * Note: for some non-Gregorian calendars, different + * **Note:** for some non-Gregorian calendars, different * fields may be necessary for complete disambiguation. For example, a full - * specification of the historial Arabic astronomical calendar requires year, - * month, day-of-month and day-of-week in some cases. + * 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 + * **Note:** There are certain possible ambiguities in * interpretation of certain singular times, which are resolved in the * following ways: - *
* 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 {@link DateFormat} - * to format dates. + * runtime. Use `DateFormat` to format dates. * - *
- * Calendar
provides an API for field "rolling", where fields
+ * `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
.
+ * month up in the date December 12, **1996** results in
+ * January 12, **1996**.
*
- *
- * Calendar
also provides a date arithmetic function for
+ * `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
.
+ * For example, subtracting 5 days from the date `September 12, 1996`
+ * results in `September 7, 1996`.
*
- *
Supported range + * ***Supported range*** * - *
The allowable range of Calendar
has been
- * narrowed. GregorianCalendar
used to attempt to support
- * the range of dates with millisecond values from
- * Long.MIN_VALUE
to Long.MAX_VALUE
.
- * The new Calendar
protocol specifies the
+ * The allowable range of `Calendar` has been narrowed. `GregorianCalendar` used
+ * to attempt to support the range of dates with millisecond values from
+ * `Long.MIN_VALUE` to `Long.MAX_VALUE`. The new `Calendar` protocol specifies the
* maximum range of supportable dates as those having Julian day numbers
- * of -0x7F000000
to +0x7F000000
. This
- * corresponds to years from ~5,800,000 BCE to ~5,800,000 CE. Programmers
- * should use the protected constants in Calendar
to
- * specify an extremely early or extremely late date.
+ * 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: + *
ICU_ENABLE_TENTATIVE_ERA=true
.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
@@ -915,7 +906,7 @@ public:
* 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.
- *
+ *
* @param option the behavior for handling repeating wall time, either
* UCAL_WALLTIME_FIRST
or UCAL_WALLTIME_LAST
.
* @see #getRepeatedWallTimeOption
@@ -926,7 +917,7 @@ public:
/**
* Gets the behavior for handling wall time repeating multiple times
* at negative time zone offset transitions.
- *
+ *
* @return the behavior for handling repeating wall time, either
* UCAL_WALLTIME_FIRST
or UCAL_WALLTIME_LAST
.
* @see #setRepeatedWallTimeOption
@@ -947,12 +938,12 @@ public:
*
* 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.
- *
+ *
* @param option the behavior for handling skipped wall time at positive time zone
* offset transitions, one of UCAL_WALLTIME_FIRST
, UCAL_WALLTIME_LAST
and
* UCAL_WALLTIME_NEXT_VALID
.
* @see #getSkippedWallTimeOption
- *
+ *
* @stable ICU 49
*/
void setSkippedWallTimeOption(UCalendarWallTimeOption option);
@@ -960,7 +951,7 @@ public:
/**
* Gets the behavior for handling skipped wall time at positive time zone offset
* transitions.
- *
+ *
* @return the behavior for handling skipped wall time, one of
* UCAL_WALLTIME_FIRST
, UCAL_WALLTIME_LAST
* and UCAL_WALLTIME_NEXT_VALID
.
@@ -1028,6 +1019,7 @@ public:
*/
uint8_t getMinimalDaysInFirstWeek(void) const;
+#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the minimum value for the given time field. e.g., for Gregorian
* DAY_OF_MONTH, 1.
@@ -1037,6 +1029,7 @@ public:
* @deprecated ICU 2.6. Use getMinimum(UCalendarDateFields field) instead.
*/
virtual int32_t getMinimum(EDateFields field) const;
+#endif // U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the minimum value for the given time field. e.g., for Gregorian
@@ -1048,6 +1041,7 @@ public:
*/
virtual int32_t getMinimum(UCalendarDateFields field) const;
+#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,
* 31.
@@ -1057,6 +1051,7 @@ public:
* @deprecated ICU 2.6. Use getMaximum(UCalendarDateFields field) instead.
*/
virtual int32_t getMaximum(EDateFields field) const;
+#endif // U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,
@@ -1068,6 +1063,7 @@ public:
*/
virtual int32_t getMaximum(UCalendarDateFields field) const;
+#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the highest minimum value for the given field if varies. Otherwise same as
* getMinimum(). For Gregorian, no difference.
@@ -1077,6 +1073,7 @@ public:
* @deprecated ICU 2.6. Use getGreatestMinimum(UCalendarDateFields field) instead.
*/
virtual int32_t getGreatestMinimum(EDateFields field) const;
+#endif // U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the highest minimum value for the given field if varies. Otherwise same as
@@ -1088,6 +1085,7 @@ public:
*/
virtual int32_t getGreatestMinimum(UCalendarDateFields field) const;
+#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the lowest maximum value for the given field if varies. Otherwise same as
* getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.
@@ -1097,6 +1095,7 @@ public:
* @deprecated ICU 2.6. Use getLeastMaximum(UCalendarDateFields field) instead.
*/
virtual int32_t getLeastMaximum(EDateFields field) const;
+#endif // U_FORCE_HIDE_DEPRECATED_API
/**
* Gets the lowest maximum value for the given field if varies. Otherwise same as
@@ -1728,9 +1727,7 @@ protected:
/**
* 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()
.
- * @see #validateField(int, int, int, int&)
+ * Generic fields can be handled by `Calendar::validateField()`.
* @internal
*/
virtual void validateField(UCalendarDateFields field, UErrorCode &status);
@@ -1751,7 +1748,7 @@ protected:
* reflects local zone wall time.
* @internal
*/
- int32_t computeMillisInDay();
+ double computeMillisInDay();
/**
* This method can assume EXTENDED_YEAR has been set.
@@ -1762,7 +1759,7 @@ protected:
* when this function fails.
* @internal
*/
- int32_t computeZoneOffset(double millis, int32_t millisInDay, UErrorCode &ec);
+ int32_t computeZoneOffset(double millis, double millisInDay, UErrorCode &ec);
/**
@@ -1924,11 +1921,13 @@ protected:
*/
int32_t fFields[UCAL_FIELD_COUNT];
+#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
* The flags which tell if a specified time field for the calendar is set.
* @deprecated ICU 2.8 use (fStamp[n]!=kUnset)
*/
UBool fIsSet[UCAL_FIELD_COUNT];
+#endif // U_FORCE_HIDE_DEPRECATED_API
/** Special values of stamp[]
* @stable ICU 2.0
@@ -2181,7 +2180,7 @@ private:
TimeZone* fZone;
/**
- * Option for rpeated wall time
+ * Option for repeated wall time
* @see #setRepeatedWallTimeOption
*/
UCalendarWallTimeOption fRepeatedWallTime;
@@ -2310,7 +2309,6 @@ private:
* should only be called if this calendar is not lenient.
* @see #isLenient
* @see #validateField(int, int&)
- * @internal
*/
void validateFields(UErrorCode &status);
@@ -2320,7 +2318,6 @@ private:
* U_ILLEGAL_ARGUMENT_ERROR
will be set. Subclasses may
* use this method in their implementation of {@link
* #validateField(int, int&)}.
- * @internal
*/
void validateField(UCalendarDateFields field, int32_t min, int32_t max, UErrorCode& status);
@@ -2466,7 +2463,7 @@ private:
BasicTimeZone* getBasicTimeZone() const;
/**
- * Find the previous zone transtion near the given time.
+ * Find the previous zone transition near the given time.
* @param base The base time, inclusive
* @param transitionTime Receives the result time
* @param status The error status
@@ -2555,8 +2552,9 @@ inline int32_t Calendar::weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek)
#endif /* U_HIDE_INTERNAL_API */
U_NAMESPACE_END
-#endif // U_SHOW_CPLUSPLUS_API
#endif /* #if !UCONFIG_NO_FORMATTING */
+#endif /* U_SHOW_CPLUSPLUS_API */
+
#endif // _CALENDAR