ICU 66.1 66.1
calendar.h
Go to the documentation of this file.
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4********************************************************************************
5* Copyright (C) 1997-2014, International Business Machines
6* Corporation and others. All Rights Reserved.
7********************************************************************************
8*
9* File CALENDAR.H
10*
11* Modification History:
12*
13* Date Name Description
14* 04/22/97 aliu Expanded and corrected comments and other header
15* contents.
16* 05/01/97 aliu Made equals(), before(), after() arguments const.
17* 05/20/97 aliu Replaced fAreFieldsSet with fAreFieldsInSync and
18* fAreAllFieldsSet.
19* 07/27/98 stephen Sync up with JDK 1.2
20* 11/15/99 weiv added YEAR_WOY and DOW_LOCAL
21* to EDateFields
22* 8/19/2002 srl Removed Javaisms
23* 11/07/2003 srl Update, clean up documentation.
24********************************************************************************
25*/
26
27#ifndef CALENDAR_H
28#define CALENDAR_H
29
30#include "unicode/utypes.h"
31
32#if U_SHOW_CPLUSPLUS_API
33
38#if !UCONFIG_NO_FORMATTING
39
40#include "unicode/uobject.h"
41#include "unicode/locid.h"
42#include "unicode/timezone.h"
43#include "unicode/ucal.h"
44#include "unicode/umisc.h"
45
46U_NAMESPACE_BEGIN
47
48class ICUServiceFactory;
49
53typedef int32_t UFieldResolutionTable[12][8];
54
55class BasicTimeZone;
188public:
189#ifndef U_FORCE_HIDE_DEPRECATED_API
197#ifndef U_HIDE_DEPRECATED_API
198/*
199 * ERA may be defined on other platforms. To avoid any potential problems undefined it here.
200 */
201#ifdef ERA
202#undef ERA
203#endif
204 ERA, // Example: 0..1
205 YEAR, // Example: 1..big number
206 MONTH, // Example: 0..11
207 WEEK_OF_YEAR, // Example: 1..53
208 WEEK_OF_MONTH, // Example: 1..4
209 DATE, // Example: 1..31
210 DAY_OF_YEAR, // Example: 1..365
211 DAY_OF_WEEK, // Example: 1..7
212 DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1
213 AM_PM, // Example: 0..1
214 HOUR, // Example: 0..11
215 HOUR_OF_DAY, // Example: 0..23
216 MINUTE, // Example: 0..59
217 SECOND, // Example: 0..59
218 MILLISECOND, // Example: 0..999
219 ZONE_OFFSET, // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR
220 DST_OFFSET, // Example: 0 or U_MILLIS_PER_HOUR
221 YEAR_WOY, // 'Y' Example: 1..big number - Year of Week of Year
222 DOW_LOCAL, // 'e' Example: 1..7 - Day of Week / Localized
223
224 EXTENDED_YEAR,
225 JULIAN_DAY,
226 MILLISECONDS_IN_DAY,
227 IS_LEAP_MONTH,
228
229 FIELD_COUNT = UCAL_FIELD_COUNT // See ucal.h for other fields.
230#endif /* U_HIDE_DEPRECATED_API */
231 };
232#endif // U_FORCE_HIDE_DEPRECATED_API
233
234#ifndef U_HIDE_DEPRECATED_API
242 SUNDAY = 1,
243 MONDAY,
244 TUESDAY,
245 WEDNESDAY,
246 THURSDAY,
247 FRIDAY,
248 SATURDAY
249 };
250
255 enum EMonths {
256 JANUARY,
257 FEBRUARY,
258 MARCH,
259 APRIL,
260 MAY,
261 JUNE,
262 JULY,
263 AUGUST,
264 SEPTEMBER,
265 OCTOBER,
266 NOVEMBER,
267 DECEMBER,
268 UNDECIMBER
269 };
270
275 enum EAmpm {
276 AM,
277 PM
278 };
279#endif /* U_HIDE_DEPRECATED_API */
280
285 virtual ~Calendar();
286
293 virtual Calendar* clone() const = 0;
294
306 static Calendar* U_EXPORT2 createInstance(UErrorCode& success);
307
320 static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, UErrorCode& success);
321
333 static Calendar* U_EXPORT2 createInstance(const TimeZone& zone, UErrorCode& success);
334
345 static Calendar* U_EXPORT2 createInstance(const Locale& aLocale, UErrorCode& success);
346
360 static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
361
374 static Calendar* U_EXPORT2 createInstance(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
375
385 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
386
387
404 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* key,
405 const Locale& locale, UBool commonlyUsed, UErrorCode& status);
406
414 static UDate U_EXPORT2 getNow(void);
415
429 inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); }
430
441 inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); }
442
454 virtual UBool operator==(const Calendar& that) const;
455
464 UBool operator!=(const Calendar& that) const {return !operator==(that);}
465
476 virtual UBool isEquivalentTo(const Calendar& other) const;
477
492 UBool equals(const Calendar& when, UErrorCode& status) const;
493
507 UBool before(const Calendar& when, UErrorCode& status) const;
508
522 UBool after(const Calendar& when, UErrorCode& status) const;
523
524#ifndef U_FORCE_HIDE_DEPRECATED_API
545 virtual void add(EDateFields field, int32_t amount, UErrorCode& status);
546#endif // U_FORCE_HIDE_DEPRECATED_API
547
568 virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode& status);
569
570#ifndef U_HIDE_DEPRECATED_API
603 inline void roll(EDateFields field, UBool up, UErrorCode& status);
604#endif /* U_HIDE_DEPRECATED_API */
605
638 inline void roll(UCalendarDateFields field, UBool up, UErrorCode& status);
639
640#ifndef U_FORCE_HIDE_DEPRECATED_API
672 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
673#endif // U_FORCE_HIDE_DEPRECATED_API
674
706 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
707
708#ifndef U_FORCE_HIDE_DEPRECATED_API
764 virtual int32_t fieldDifference(UDate when, EDateFields field, UErrorCode& status);
765#endif // U_FORCE_HIDE_DEPRECATED_API
766
822 virtual int32_t fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status);
823
833
841 void setTimeZone(const TimeZone& zone);
842
851 const TimeZone& getTimeZone(void) const;
852
862
871 virtual UBool inDaylightTime(UErrorCode& status) const = 0;
872
885 void setLenient(UBool lenient);
886
893 UBool isLenient(void) const;
894
916
927
950
962
963#ifndef U_HIDE_DEPRECATED_API
971#endif /* U_HIDE_DEPRECATED_API */
972
980
981#ifndef U_HIDE_DEPRECATED_API
989#endif /* U_HIDE_DEPRECATED_API */
990
999
1009 void setMinimalDaysInFirstWeek(uint8_t value);
1010
1020 uint8_t getMinimalDaysInFirstWeek(void) const;
1021
1022#ifndef U_FORCE_HIDE_DEPRECATED_API
1031 virtual int32_t getMinimum(EDateFields field) const;
1032#endif // U_FORCE_HIDE_DEPRECATED_API
1033
1042 virtual int32_t getMinimum(UCalendarDateFields field) const;
1043
1044#ifndef U_FORCE_HIDE_DEPRECATED_API
1053 virtual int32_t getMaximum(EDateFields field) const;
1054#endif // U_FORCE_HIDE_DEPRECATED_API
1055
1064 virtual int32_t getMaximum(UCalendarDateFields field) const;
1065
1066#ifndef U_FORCE_HIDE_DEPRECATED_API
1075 virtual int32_t getGreatestMinimum(EDateFields field) const;
1076#endif // U_FORCE_HIDE_DEPRECATED_API
1077
1086 virtual int32_t getGreatestMinimum(UCalendarDateFields field) const;
1087
1088#ifndef U_FORCE_HIDE_DEPRECATED_API
1097 virtual int32_t getLeastMaximum(EDateFields field) const;
1098#endif // U_FORCE_HIDE_DEPRECATED_API
1099
1108 virtual int32_t getLeastMaximum(UCalendarDateFields field) const;
1109
1110#ifndef U_HIDE_DEPRECATED_API
1125 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
1126#endif /* U_HIDE_DEPRECATED_API */
1127
1142 virtual int32_t getActualMinimum(UCalendarDateFields field, UErrorCode& status) const;
1143
1144#ifndef U_HIDE_DEPRECATED_API
1161 int32_t getActualMaximum(EDateFields field, UErrorCode& status) const;
1162#endif /* U_HIDE_DEPRECATED_API */
1163
1180 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
1181
1182#ifndef U_HIDE_DEPRECATED_API
1196 int32_t get(EDateFields field, UErrorCode& status) const;
1197#endif /* U_HIDE_DEPRECATED_API */
1198
1212 int32_t get(UCalendarDateFields field, UErrorCode& status) const;
1213
1214#ifndef U_HIDE_DEPRECATED_API
1224#endif /* U_HIDE_DEPRECATED_API */
1225
1235
1236#ifndef U_HIDE_DEPRECATED_API
1244 void set(EDateFields field, int32_t value);
1245#endif /* U_HIDE_DEPRECATED_API */
1246
1254 void set(UCalendarDateFields field, int32_t value);
1255
1266 void set(int32_t year, int32_t month, int32_t date);
1267
1280 void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute);
1281
1295 void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second);
1296
1303 void clear(void);
1304
1305#ifndef U_HIDE_DEPRECATED_API
1314 void clear(EDateFields field);
1315#endif /* U_HIDE_DEPRECATED_API */
1316
1326
1342 virtual UClassID getDynamicClassID(void) const = 0;
1343
1376 virtual const char * getType() const = 0;
1377
1395
1410 virtual int32_t getWeekendTransition(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const;
1411
1421 virtual UBool isWeekend(UDate date, UErrorCode &status) const;
1422
1430 virtual UBool isWeekend(void) const;
1431
1432protected:
1433
1443
1450 Calendar(const Calendar& source);
1451
1459
1470 Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success);
1471
1481 Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
1482
1491 virtual void computeTime(UErrorCode& status);
1492
1504 virtual void computeFields(UErrorCode& status);
1505
1515 double getTimeInMillis(UErrorCode& status) const;
1516
1525 void setTimeInMillis( double millis, UErrorCode& status );
1526
1536 void complete(UErrorCode& status);
1537
1538#ifndef U_HIDE_DEPRECATED_API
1547 inline int32_t internalGet(EDateFields field) const {return fFields[field];}
1548#endif /* U_HIDE_DEPRECATED_API */
1549
1550#ifndef U_HIDE_INTERNAL_API
1561 inline int32_t internalGet(UCalendarDateFields field, int32_t defaultValue) const {return fStamp[field]>kUnset ? fFields[field] : defaultValue;}
1562
1571 inline int32_t internalGet(UCalendarDateFields field) const {return fFields[field];}
1572#endif /* U_HIDE_INTERNAL_API */
1573
1574#ifndef U_HIDE_DEPRECATED_API
1584 void internalSet(EDateFields field, int32_t value);
1585#endif /* U_HIDE_DEPRECATED_API */
1586
1596 inline void internalSet(UCalendarDateFields field, int32_t value);
1597
1604 virtual void prepareGetActual(UCalendarDateFields field, UBool isMinimum, UErrorCode &status);
1605
1611#ifndef U_HIDE_INTERNAL_API
1612 UCAL_LIMIT_MINIMUM = 0,
1613 UCAL_LIMIT_GREATEST_MINIMUM,
1614 UCAL_LIMIT_LEAST_MAXIMUM,
1615 UCAL_LIMIT_MAXIMUM,
1616 UCAL_LIMIT_COUNT
1617#endif /* U_HIDE_INTERNAL_API */
1618 };
1619
1641 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const = 0;
1642
1650 virtual int32_t getLimit(UCalendarDateFields field, ELimitType limitType) const;
1651
1652
1666 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
1667 UBool useMonth) const = 0;
1668
1676 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const ;
1677
1685 virtual int32_t handleGetYearLength(int32_t eyear) const;
1686
1687
1696 virtual int32_t handleGetExtendedYear() = 0;
1697
1707
1716 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
1717
1724 virtual void validateField(UCalendarDateFields field, UErrorCode &status);
1725
1726#ifndef U_HIDE_INTERNAL_API
1734
1743
1753 int32_t computeZoneOffset(double millis, double millisInDay, UErrorCode &ec);
1754
1755
1764 int32_t newestStamp(UCalendarDateFields start, UCalendarDateFields end, int32_t bestSoFar) const;
1765
1771 enum {
1773 kResolveSTOP = -1,
1775 kResolveRemap = 32
1777
1783 static const UFieldResolutionTable kDatePrecedence[];
1784
1790 static const UFieldResolutionTable kYearPrecedence[];
1791
1797 static const UFieldResolutionTable kDOWPrecedence[];
1798
1827#endif /* U_HIDE_INTERNAL_API */
1828
1829
1834
1835#ifndef U_HIDE_INTERNAL_API
1842#endif /* U_HIDE_INTERNAL_API */
1843
1844
1845private:
1854 int32_t getActualHelper(UCalendarDateFields field, int32_t startValue, int32_t endValue, UErrorCode &status) const;
1855
1856
1857protected:
1863
1875
1882
1891
1898 UDate internalGetTime(void) const { return fTime; }
1899
1907 void internalSetTime(UDate time) { fTime = time; }
1908
1913 int32_t fFields[UCAL_FIELD_COUNT];
1914
1915#ifndef U_FORCE_HIDE_DEPRECATED_API
1921#endif // U_FORCE_HIDE_DEPRECATED_API
1922
1926 enum {
1927 kUnset = 0,
1928 kInternallySet,
1929 kMinimumUserStamp
1930 };
1931
1938 int32_t fStamp[UCAL_FIELD_COUNT];
1939
1964 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
1965
1966#ifndef U_HIDE_INTERNAL_API
1972 int32_t getGregorianYear() const {
1973 return fGregorianYear;
1974 }
1975
1981 int32_t getGregorianMonth() const {
1982 return fGregorianMonth;
1983 }
1984
1990 int32_t getGregorianDayOfYear() const {
1991 return fGregorianDayOfYear;
1992 }
1993
1999 int32_t getGregorianDayOfMonth() const {
2000 return fGregorianDayOfMonth;
2001 }
2002#endif /* U_HIDE_INTERNAL_API */
2003
2010 virtual int32_t getDefaultMonthInYear(int32_t eyear) ;
2011
2012
2020 virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month);
2021
2022 //-------------------------------------------------------------------------
2023 // Protected utility methods for use by subclasses. These are very handy
2024 // for implementing add, roll, and computeFields.
2025 //-------------------------------------------------------------------------
2026
2056 virtual void pinField(UCalendarDateFields field, UErrorCode& status);
2057
2101 int32_t weekNumber(int32_t desiredDay, int32_t dayOfPeriod, int32_t dayOfWeek);
2102
2103
2104#ifndef U_HIDE_INTERNAL_API
2135 inline int32_t weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek);
2136
2141 int32_t getLocalDOW();
2142#endif /* U_HIDE_INTERNAL_API */
2143
2144private:
2145
2149 int32_t fNextStamp;// = MINIMUM_USER_STAMP;
2150
2155 void recalculateStamp();
2156
2160 UDate fTime;
2161
2165 UBool fLenient;
2166
2171 TimeZone* fZone;
2172
2177 UCalendarWallTimeOption fRepeatedWallTime;
2178
2183 UCalendarWallTimeOption fSkippedWallTime;
2184
2193 UCalendarDaysOfWeek fFirstDayOfWeek;
2194 uint8_t fMinimalDaysInFirstWeek;
2195 UCalendarDaysOfWeek fWeekendOnset;
2196 int32_t fWeekendOnsetMillis;
2197 UCalendarDaysOfWeek fWeekendCease;
2198 int32_t fWeekendCeaseMillis;
2199
2210 void setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& success);
2211
2221 void updateTime(UErrorCode& status);
2222
2228 int32_t fGregorianYear;
2229
2235 int32_t fGregorianMonth;
2236
2242 int32_t fGregorianDayOfYear;
2243
2249 int32_t fGregorianDayOfMonth;
2250
2251 /* calculations */
2252
2259 void computeGregorianAndDOWFields(int32_t julianDay, UErrorCode &ec);
2260
2261protected:
2262
2270 void computeGregorianFields(int32_t julianDay, UErrorCode &ec);
2271
2272private:
2273
2294 void computeWeekFields(UErrorCode &ec);
2295
2296
2304 void validateFields(UErrorCode &status);
2305
2313 void validateField(UCalendarDateFields field, int32_t min, int32_t max, UErrorCode& status);
2314
2315 protected:
2316#ifndef U_HIDE_INTERNAL_API
2326 static uint8_t julianDayToDayOfWeek(double julian);
2327#endif /* U_HIDE_INTERNAL_API */
2328
2329 private:
2330 char validLocale[ULOC_FULLNAME_CAPACITY];
2331 char actualLocale[ULOC_FULLNAME_CAPACITY];
2332
2333 public:
2334#if !UCONFIG_NO_SERVICE
2339#ifndef U_HIDE_INTERNAL_API
2347
2361 static URegistryKey registerFactory(ICUServiceFactory* toAdopt, UErrorCode& status);
2362
2379#endif /* U_HIDE_INTERNAL_API */
2380
2385 friend class CalendarFactory;
2386
2391 friend class CalendarService;
2392
2397 friend class DefaultCalendarFactory;
2398#endif /* !UCONFIG_NO_SERVICE */
2399
2404 virtual UBool haveDefaultCentury() const = 0;
2405
2410 virtual UDate defaultCenturyStart() const = 0;
2415 virtual int32_t defaultCenturyStartYear() const = 0;
2416
2424
2430 virtual int32_t getRelatedYear(UErrorCode &status) const;
2431
2437 virtual void setRelatedYear(int32_t year);
2438
2439#ifndef U_HIDE_INTERNAL_API
2446 const char* getLocaleID(ULocDataLocaleType type, UErrorCode &status) const;
2447#endif /* U_HIDE_INTERNAL_API */
2448
2449private:
2454 BasicTimeZone* getBasicTimeZone() const;
2455
2463 UBool getImmediatePreviousZoneTransition(UDate base, UDate *transitionTime, UErrorCode& status) const;
2464
2465public:
2466#ifndef U_HIDE_INTERNAL_API
2475 static Calendar * U_EXPORT2 makeInstance(
2476 const Locale &locale, UErrorCode &status);
2477
2488 static void U_EXPORT2 getCalendarTypeFromLocale(
2489 const Locale &locale,
2490 char *typeBuffer,
2491 int32_t typeBufferSize,
2492 UErrorCode &status);
2493#endif /* U_HIDE_INTERNAL_API */
2494};
2495
2496// -------------------------------------
2497
2498inline Calendar*
2499Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode)
2500{
2501 // since the Locale isn't specified, use the default locale
2502 return createInstance(zone, Locale::getDefault(), errorCode);
2503}
2504
2505// -------------------------------------
2506
2507inline void
2508Calendar::roll(UCalendarDateFields field, UBool up, UErrorCode& status)
2509{
2510 roll(field, (int32_t)(up ? +1 : -1), status);
2511}
2512
2513#ifndef U_HIDE_DEPRECATED_API
2514inline void
2515Calendar::roll(EDateFields field, UBool up, UErrorCode& status)
2516{
2517 roll((UCalendarDateFields) field, up, status);
2518}
2519#endif /* U_HIDE_DEPRECATED_API */
2520
2521
2522// -------------------------------------
2523
2529inline void
2530Calendar::internalSet(UCalendarDateFields field, int32_t value)
2531{
2532 fFields[field] = value;
2533 fStamp[field] = kInternallySet;
2534 fIsSet[field] = TRUE; // Remove later
2535}
2536
2537
2538#ifndef U_HIDE_INTERNAL_API
2539inline int32_t Calendar::weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek)
2540{
2541 return weekNumber(dayOfPeriod, dayOfPeriod, dayOfWeek);
2542}
2543#endif /* U_HIDE_INTERNAL_API */
2544
2545U_NAMESPACE_END
2546
2547#endif /* #if !UCONFIG_NO_FORMATTING */
2548
2549#endif /* U_SHOW_CPLUSPLUS_API */
2550
2551#endif // _CALENDAR
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:38
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition: calendar.h:187
UBool after(const Calendar &when, UErrorCode &status) const
Returns true if this Calendar's current time is after "when"'s current time.
virtual int32_t getGreatestMinimum(EDateFields field) const
Gets the highest minimum value for the given field if varies.
UBool fIsTimeSet
The flag which indicates if the current time is set in the calendar.
Definition: calendar.h:1862
void setTime(UDate date, UErrorCode &status)
Sets this Calendar's current time with the given UDate.
Definition: calendar.h:441
void setSkippedWallTimeOption(UCalendarWallTimeOption option)
Sets the behavior for handling skipped wall time at positive time zone offset transitions.
int32_t internalGet(UCalendarDateFields field) const
Gets the value for a given time field.
Definition: calendar.h:1571
int32_t newestStamp(UCalendarDateFields start, UCalendarDateFields end, int32_t bestSoFar) const
Determine the best stamp in a range.
void set(UCalendarDateFields field, int32_t value)
Sets the given time field with the given value.
UCalendarWallTimeOption getRepeatedWallTimeOption(void) const
Gets the behavior for handling wall time repeating multiple times at negative time zone offset transi...
Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const
Get the locale for this calendar object.
int32_t get(UCalendarDateFields field, UErrorCode &status) const
Gets the value for a given time field.
virtual int32_t getMinimum(EDateFields field) const
Gets the minimum value for the given time field.
int32_t getLocalDOW()
returns the local DOW, valid range 0..6
virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode &status)
Time Field Rolling function.
virtual 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.
int32_t weekNumber(int32_t desiredDay, int32_t dayOfPeriod, int32_t dayOfWeek)
Return the week number of a day, within a period.
virtual int32_t getLeastMaximum(UCalendarDateFields field) const
Gets the lowest maximum value for the given field if varies.
static Calendar * createInstance(UErrorCode &success)
Creates a Calendar using the default timezone and locale.
virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)
Subclasses may override this.
void setTimeInMillis(double millis, UErrorCode &status)
Sets this Calendar's current time from the given long value.
static Calendar * createInstance(const TimeZone &zone, const Locale &aLocale, UErrorCode &success)
Gets a Calendar using the given timezone and given locale.
void set(EDateFields field, int32_t value)
Sets the given time field with the given value.
void complete(UErrorCode &status)
Recomputes the current time from currently set fields, and then fills in any unset fields in the time...
static void getCalendarTypeFromLocale(const Locale &locale, char *typeBuffer, int32_t typeBufferSize, UErrorCode &status)
Get the calendar type for given locale.
UBool isSet(UCalendarDateFields field) const
Determines if the given time field has a value set.
void setLenient(UBool lenient)
Specifies whether or not date/time interpretation is to be lenient.
int32_t getGregorianMonth() const
Return the month (0-based) on the Gregorian calendar as computed by computeGregorianFields().
Definition: calendar.h:1981
void computeGregorianFields(int32_t julianDay, UErrorCode &ec)
Compute the Gregorian calendar year, month, and day of month from the Julian day.
int32_t getGregorianDayOfYear() const
Return the day of year (1-based) on the Gregorian calendar as computed by computeGregorianFields().
Definition: calendar.h:1990
virtual UBool haveDefaultCentury() const =0
EDaysOfWeek
Useful constant for days of week.
Definition: calendar.h:241
static StringEnumeration * getAvailableLocales(void)
INTERNAL FOR 2.6 – Registration.
virtual int32_t getLeastMaximum(EDateFields field) const
Gets the lowest maximum value for the given field if varies.
virtual ~Calendar()
destructor
int32_t get(EDateFields field, UErrorCode &status) const
Gets the value for a given time field.
EDateFields
Field IDs for date and time.
Definition: calendar.h:196
virtual void roll(EDateFields field, int32_t amount, UErrorCode &status)
Time Field Rolling function.
static Calendar * createInstance(const Locale &aLocale, UErrorCode &success)
Creates a Calendar using the default timezone and the given locale.
static Calendar * makeInstance(const Locale &locale, UErrorCode &status)
Creates a new Calendar from a Locale for the cache.
ELimitType
Limit enums.
Definition: calendar.h:1610
UBool isSet(EDateFields field) const
Determines if the given time field has a value set.
Calendar(UErrorCode &success)
Constructs a Calendar with the default time zone as returned by TimeZone::createInstance(),...
UBool equals(const Calendar &when, UErrorCode &status) const
Compares the Calendar time, whereas Calendar::operator== compares the equality of Calendar objects.
virtual int32_t getRelatedYear(UErrorCode &status) const
void setFirstDayOfWeek(EDaysOfWeek value)
Sets what the first day of the week is; e.g., Sunday in US, Monday in France.
virtual Calendar * clone() const =0
Create and return a polymorphic copy of this calendar.
void clear(UCalendarDateFields field)
Clears the value in the given time field, both making it unset and assigning it a value of zero.
virtual void handleComputeFields(int32_t julianDay, UErrorCode &status)
Subclasses may override this method to compute several fields specific to each calendar system.
const TimeZone & getTimeZone(void) const
Returns a reference to the time zone owned by this calendar.
UCalendarDateFields resolveFields(const UFieldResolutionTable *precedenceTable)
Given a precedence table, return the newest field combination in the table, or UCAL_FIELD_COUNT if no...
static 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 di...
UBool fAreFieldsVirtuallySet
True if all fields have been virtually set, but have not yet been computed.
Definition: calendar.h:1890
double getTimeInMillis(UErrorCode &status) const
Gets this Calendar's current time as a long.
UCalendarDaysOfWeek getFirstDayOfWeek(UErrorCode &status) const
Gets what the first day of the week is; e.g., Sunday in US, Monday in France.
Calendar & operator=(const Calendar &right)
Default assignment operator.
static Calendar * createInstance(TimeZone *zoneToAdopt, const Locale &aLocale, UErrorCode &success)
Creates a Calendar using the given timezone and given locale.
UCalendarWallTimeOption getSkippedWallTimeOption(void) const
Gets the behavior for handling skipped wall time at positive time zone offset transitions.
int32_t internalGet(EDateFields field) const
Gets the value for a given time field.
Definition: calendar.h:1547
static URegistryKey registerFactory(ICUServiceFactory *toAdopt, UErrorCode &status)
Register a new Calendar factory.
virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month)
Called by computeJulianDay.
TimeZone * orphanTimeZone(void)
Returns the time zone owned by this calendar.
virtual const char * getType() const =0
Returns the calendar type name string for this Calendar object.
UBool operator!=(const Calendar &that) const
Compares the inequality of two Calendar objects.
Definition: calendar.h:464
UBool fAreFieldsSet
True if the fields are in sync with the currently set time of this Calendar.
Definition: calendar.h:1874
Calendar(const Calendar &source)
Copy constructor.
virtual void computeFields(UErrorCode &status)
Converts GMT as milliseconds to time field values.
virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode &status) const
Return the maximum value that this field could have, given the current date.
static const Locale * getAvailableLocales(int32_t &count)
Returns a list of the locales for which Calendars are installed.
virtual void prepareGetActual(UCalendarDateFields field, UBool isMinimum, UErrorCode &status)
Prepare this calendar for computing the actual minimum or maximum.
virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const
Return the number of days in the given month of the given extended year of this calendar system.
void adoptTimeZone(TimeZone *value)
Sets the calendar's time zone to be the one passed in.
int32_t getActualMaximum(EDateFields field, UErrorCode &status) const
Return the maximum value that this field could have, given the current date.
UBool before(const Calendar &when, UErrorCode &status) const
Returns true if this Calendar's current time is before "when"'s current time.
virtual int32_t defaultCenturyStartYear() const =0
void setMinimalDaysInFirstWeek(uint8_t value)
Sets what the minimal days required in the first week of the year are; For example,...
const char * getLocaleID(ULocDataLocaleType type, UErrorCode &status) const
Get the locale for this calendar object.
virtual UDate defaultCenturyStart() const =0
virtual int32_t getMaximum(UCalendarDateFields field) const
Gets the maximum value for the given time field.
virtual void pinField(UCalendarDateFields field, UErrorCode &status)
Adjust the specified field so that it is within the allowable range for the date to which this calend...
int32_t getGregorianYear() const
Return the extended year on the Gregorian calendar as computed by computeGregorianFields().
Definition: calendar.h:1972
int32_t internalGet(UCalendarDateFields field, int32_t defaultValue) const
Gets the value for a given time field.
Definition: calendar.h:1561
void internalSetTime(UDate time)
Set the current time without affecting flags or fields.
Definition: calendar.h:1907
static uint8_t julianDayToDayOfWeek(double julian)
Convert a quasi Julian date to the day of the week.
virtual int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const
Return the minimum value that this field could have, given the current date.
UDate getTime(UErrorCode &status) const
Gets this Calendar's time as milliseconds.
Definition: calendar.h:429
UBool fAreAllFieldsSet
True if all of the fields have been set.
Definition: calendar.h:1881
int32_t computeJulianDay()
Compute the Julian day from fields.
virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const =0
Subclass API for defining limits of different types.
virtual int32_t getWeekendTransition(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const
Returns the time during the day at which the weekend begins or ends in this calendar system.
virtual int32_t handleGetExtendedYear()=0
Return the extended year defined by the current fields.
void clear(EDateFields field)
Clears the value in the given time field, both making it unset and assigning it a value of zero.
int32_t getActualMinimum(EDateFields field, UErrorCode &status) const
Return the minimum value that this field could have, given the current date.
UCalendarDateFields newerField(UCalendarDateFields defaultField, UCalendarDateFields alternateField) const
Return the field that is newer, either defaultField, or alternateField.
virtual UBool isEquivalentTo(const Calendar &other) const
Returns TRUE if the given Calendar object is equivalent to this one.
double computeMillisInDay()
Compute the milliseconds in the day from the fields.
EDaysOfWeek getFirstDayOfWeek(void) const
Gets what the first day of the week is; e.g., Sunday in US, Monday in France.
virtual int32_t getGreatestMinimum(UCalendarDateFields field) const
Gets the highest minimum value for the given field if varies.
Calendar(const TimeZone &zone, const Locale &aLocale, UErrorCode &success)
Constructs a Calendar with the given time zone and locale.
static Calendar * createInstance(const TimeZone &zone, UErrorCode &success)
Creates a Calendar using the given timezone and the default locale.
void setTimeZone(const TimeZone &zone)
Sets the calendar's time zone to be the same as the one passed in.
virtual int32_t getDefaultMonthInYear(int32_t eyear)
Called by computeJulianDay.
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
EAmpm
Useful constants for hour in 12-hour clock.
Definition: calendar.h:275
UDate internalGetTime(void) const
Get the current time without recomputing.
Definition: calendar.h:1898
virtual UBool operator==(const Calendar &that) const
Compares the equality of two Calendar objects.
void internalSet(EDateFields field, int32_t value)
Sets the value for a given time field.
virtual void setRelatedYear(int32_t year)
static UDate getNow(void)
Returns the current UTC (GMT) time measured in milliseconds since 0:00:00 on 1/1/70 (derived from the...
virtual int32_t getMinimum(UCalendarDateFields field) const
Gets the minimum value for the given time field.
virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy)
Subclasses must override this to convert from week fields (YEAR_WOY and WEEK_OF_YEAR) to an extended ...
void setRepeatedWallTimeOption(UCalendarWallTimeOption option)
Sets the behavior for handling wall time repeating multiple times at negative time zone offset transi...
virtual UBool inDaylightTime(UErrorCode &status) const =0
Queries if the current date for this Calendar is in Daylight Savings Time.
void setFirstDayOfWeek(UCalendarDaysOfWeek value)
Sets what the first day of the week is; e.g., Sunday in US, Monday in France.
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.
virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const =0
Return the Julian day number of day before the first day of the given month in the given extended yea...
virtual UCalendarWeekdayType getDayOfWeekType(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const
Returns whether the given day of the week is a weekday, a weekend day, or a day that transitions from...
void clear(void)
Clears the values of all the time fields, making them both unset and assigning them a value of zero.
virtual int32_t handleGetYearLength(int32_t eyear) const
Return the number of days in the given extended year of this calendar system.
EMonths
Useful constants for month.
Definition: calendar.h:255
virtual void computeTime(UErrorCode &status)
Converts Calendar's time field values to GMT as milliseconds.
virtual UBool isWeekend(void) const
Returns TRUE if this Calendar's current date-time is in the weekend in this calendar system.
UBool isLenient(void) const
Tells whether date/time interpretation is to be lenient.
virtual int32_t getLimit(UCalendarDateFields field, ELimitType limitType) const
Return a limit for a field.
virtual UBool isWeekend(UDate date, UErrorCode &status) const
Returns TRUE if the given UDate is in the weekend in this calendar system.
virtual int32_t getMaximum(EDateFields field) const
Gets the maximum value for the given time field.
virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode &status)
UDate Arithmetic function.
static UBool unregister(URegistryKey key, UErrorCode &status)
Unregister a previously-registered CalendarFactory using the key returned from the register call.
virtual void validateField(UCalendarDateFields field, UErrorCode &status)
Validate a single field of this calendar.
virtual const UFieldResolutionTable * getFieldResolutionTable() const
uint8_t getMinimalDaysInFirstWeek(void) const
Gets what the minimal days required in the first week of the year are; e.g., if the first week is def...
virtual void add(EDateFields field, int32_t amount, UErrorCode &status)
UDate Arithmetic function.
int32_t getGregorianDayOfMonth() const
Return the day of month (1-based) on the Gregorian calendar as computed by computeGregorianFields().
Definition: calendar.h:1999
Calendar(TimeZone *zone, const Locale &aLocale, UErrorCode &success)
Constructs a Calendar with the given time zone and locale.
int32_t computeZoneOffset(double millis, double millisInDay, UErrorCode &ec)
This method can assume EXTENDED_YEAR has been set.
void set(int32_t year, int32_t month, int32_t date)
Sets the values for the fields YEAR, MONTH, and DATE.
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.
virtual 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.
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195
Base class for 'pure' C++ implementations of uenum api.
Definition: strenum.h:61
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:133
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
C++ API: Locale ID object.
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
int32_t UFieldResolutionTable[12][8]
Definition: calendar.h:53
C++ API: TimeZone object.
C API: Calendar.
UCalendarDateFields
Possible fields in a UCalendar.
Definition: ucal.h:199
@ UCAL_FIELD_COUNT
One more than the highest normal UCalendarDateFields value.
Definition: ucal.h:449
UCalendarWallTimeOption
Options for handling ambiguous wall time at time zone offset transitions.
Definition: ucal.h:966
UCalendarWeekdayType
Weekday types, as returned by ucal_getDayOfWeekType().
Definition: ucal.h:1400
UCalendarDaysOfWeek
Useful constant for days of week.
Definition: ucal.h:473
#define ULOC_FULLNAME_CAPACITY
Useful constant for the maximum size of the whole locale ID (including the terminating NULL and all k...
Definition: uloc.h:264
ULocDataLocaleType
Constants for *_getLocale() Allow user to select whether she wants information on requested,...
Definition: uloc.h:338
int8_t UBool
The ICU boolean type.
Definition: umachine.h:261
#define TRUE
The TRUE value of a UBool.
Definition: umachine.h:265
C API:misc definitions.
const void * URegistryKey
Opaque type returned by registerInstance, registerFactory and unregister for service registration.
Definition: umisc.h:57
C++ API: Common ICU base class UObject.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:301
double UDate
Date and Time data type.
Definition: utypes.h:203