ICU 76.1  76.1
gregocal.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 * Copyright (C) 1997-2013, International Business Machines Corporation and others.
5 * All Rights Reserved.
6 ********************************************************************************
7 *
8 * File GREGOCAL.H
9 *
10 * Modification History:
11 *
12 * Date Name Description
13 * 04/22/97 aliu Overhauled header.
14 * 07/28/98 stephen Sync with JDK 1.2
15 * 09/04/98 stephen Re-sync with JDK 8/31 putback
16 * 09/14/98 stephen Changed type of kOneDay, kOneWeek to double.
17 * Fixed bug in roll()
18 * 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation.
19 * Added documentation of WEEK_OF_YEAR computation.
20 * 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD.
21 * {JDK bug 4210209 4209272}
22 * 11/07/2003 srl Update, clean up documentation.
23 ********************************************************************************
24 */
25 
26 #ifndef GREGOCAL_H
27 #define GREGOCAL_H
28 
29 #include "unicode/utypes.h"
30 
31 #if U_SHOW_CPLUSPLUS_API
32 
33 #if !UCONFIG_NO_FORMATTING
34 
35 #include "unicode/calendar.h"
36 
42 U_NAMESPACE_BEGIN
43 
154 public:
155 
160  enum EEras {
161  BC,
162  AD
163  };
164 
173  GregorianCalendar(UErrorCode& success);
174 
185  GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
186 
196  GregorianCalendar(const TimeZone& zone, UErrorCode& success);
197 
207  GregorianCalendar(const Locale& aLocale, UErrorCode& success);
208 
220  GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
221 
232  GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
233 
246  GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
247 
262  GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
263 
279  GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
280 
285  virtual ~GregorianCalendar();
286 
292  GregorianCalendar(const GregorianCalendar& source);
293 
300 
306  virtual GregorianCalendar* clone() const override;
307 
317  void setGregorianChange(UDate date, UErrorCode& success);
318 
327  UDate getGregorianChange() const;
328 
344  UBool isLeapYear(int32_t year) const;
345 
353  virtual UBool isEquivalentTo(const Calendar& other) const override;
354 
355 #ifndef U_FORCE_HIDE_DEPRECATED_API
356 
367  virtual void roll(EDateFields field, int32_t amount, UErrorCode& status) override;
368 #endif // U_FORCE_HIDE_DEPRECATED_API
369 
381  virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) override;
382 
383 #ifndef U_HIDE_DEPRECATED_API
384 
391  int32_t getActualMinimum(EDateFields field) const;
392 
401  int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
402 #endif /* U_HIDE_DEPRECATED_API */
403 
412  int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const override;
413 
424  virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const override;
425 
426 public:
427 
438  virtual UClassID getDynamicClassID() const override;
439 
451  static UClassID U_EXPORT2 getStaticClassID();
452 
463  virtual const char * getType() const override;
464 
465  private:
466  GregorianCalendar() = delete; // default constructor not implemented
467 
468  protected:
475  virtual int32_t internalGetEra() const;
476 
491  virtual int64_t handleComputeMonthStart(int32_t eyear, int32_t month,
492  UBool useMonth, UErrorCode& status) const override;
493 
503  virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField, UErrorCode& status) override;
504 
512  virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month, UErrorCode& status) const override;
513 
521  virtual int32_t handleGetYearLength(int32_t eyear) const override;
522 
530  virtual int32_t monthLength(int32_t month, UErrorCode& status) const;
531 
539  virtual int32_t monthLength(int32_t month, int32_t year) const;
540 
541 #ifndef U_HIDE_INTERNAL_API
542 
547  int32_t yearLength() const;
548 
549 #endif /* U_HIDE_INTERNAL_API */
550 
558  virtual UDate getEpochDay(UErrorCode& status);
559 
581  virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
582 
592  virtual int32_t handleGetExtendedYear(UErrorCode& status) override;
593 
602  virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy, UErrorCode& status) override;
603 
604 
620  virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
621 
622 #ifndef U_HIDE_INTERNAL_API
623 
628  virtual bool isEra0CountingBackward() const override { return true; }
629 #endif // U_HIDE_INTERNAL_API
630 
631  private:
639  static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
640  UBool& isLeap);
641 
646  UBool validateFields() const;
647 
651  UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
652 
662  int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
663 
671  UDate fGregorianCutover;
672 
676  int32_t fCutoverJulianDay;
677 
683  UDate fNormalizedGregorianCutover;// = gregorianCutover;
684 
689  int32_t fGregorianCutoverYear;// = 1582;
690 
698  static double millisToJulianDay(UDate millis);
699 
707  static UDate julianDayToMillis(double julian);
708 
713  UBool fIsGregorian;
714 
720  UBool fInvertGregorian;
721 
722 
723  public: // internal implementation
724 
726 
727 };
728 
729 U_NAMESPACE_END
730 
731 #endif /* #if !UCONFIG_NO_FORMATTING */
732 
733 #endif /* U_SHOW_CPLUSPLUS_API */
734 
735 #endif // _GREGOCAL
736 //eof
737 
UCalendarDateFields
Possible fields in a UCalendar.
Definition: ucal.h:202
#define DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY
Macro for the class to declare it override haveDefaultCentury, defaultCenturyStart, and defaultCenturyStartYear functions in this class.
Definition: calendar.h:2575
EEras
Useful constants for GregorianCalendar and TimeZone.
Definition: gregocal.h:160
virtual void handleComputeFields(int32_t julianDay, UErrorCode &status)
Subclasses may override this method to compute several fields specific to each calendar system...
virtual Calendar * clone() const =0
Create and return a polymorphic copy of this calendar.
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition: calendar.h:189
virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField, UErrorCode &status)
Subclasses may override this.
double UDate
Date and Time data type.
Definition: utypes.h:218
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
virtual UBool isEquivalentTo(const Calendar &other) const
Returns true if the given Calendar object is equivalent to this one.
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:133
virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode &status) const
Return the maximum value that this field could have, given the current date.
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:316
virtual int32_t handleGetExtendedYear(UErrorCode &status)=0
Return the extended year defined by the current fields.
virtual UClassID getDynamicClassID() const override=0
Returns a unique class ID POLYMORPHICALLY.
C++ API: Calendar object.
virtual const char * getType() const =0
Returns the calendar type name string for this Calendar object.
void roll(EDateFields field, UBool up, UErrorCode &status)
Time Field Rolling function.
Definition: calendar.h:2547
virtual int32_t handleGetYearLength(int32_t eyear) const
Return the number of days in the given extended year of this calendar system.
virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month, UErrorCode &status) const
Return the number of days in the given month of the given extended year of this calendar system...
virtual bool isEra0CountingBackward() const override
The year in this calendar is counting from 1 backward if the era is 0.
Definition: gregocal.h:628
Calendar & operator=(const Calendar &right)
Default assignment operator.
Concrete class which provides the standard calendar used by most of the world.
Definition: gregocal.h:153
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:430
virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy, UErrorCode &status)
Subclasses must override this to convert from week fields (YEAR_WOY and WEEK_OF_YEAR) to an extended ...
Basic definitions for ICU, for both C and C++ APIs.
virtual int64_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth, UErrorCode &status) const =0
Return the Julian day number of day before the first day of the given month in the given extended yea...
int32_t getActualMinimum(EDateFields field, UErrorCode &status) const
Return the minimum value that this field could have, given the current date.
virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const =0
Subclass API for defining limits of different types.
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:247
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195