xref: /aosp_15_r20/external/icu/libicu/cts_headers/iso8601cal.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1 // © 2022 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 #ifndef ISO8601CAL_H
4 #define ISO8601CAL_H
5 
6 #include "unicode/utypes.h"
7 
8 #if !UCONFIG_NO_FORMATTING
9 
10 #include "unicode/calendar.h"
11 #include "unicode/gregocal.h"
12 #include "unicode/timezone.h"
13 
14 U_NAMESPACE_BEGIN
15 
16 /**
17  * Concrete class which provides the ISO8601 calendar.
18  * <P>
19  * <code>ISO8601Calendar</code> is a subclass of <code>GregorianCalendar</code>
20  * that the first day of a week is Monday and the minimal days in the first
21  * week of a year or month is four days.
22  * <p>
23  * The ISO8601 calendar is identical to the Gregorian calendar in all respects
24  * except for the first day of week and the minimal days in the first week
25  * of a year.
26  * @internal
27  */
28 class ISO8601Calendar : public GregorianCalendar {
29  public:
30   //-------------------------------------------------------------------------
31   // Constructors...
32   //-------------------------------------------------------------------------
33 
34   /**
35    * Constructs a DangiCalendar based on the current time in the default time zone
36    * with the given locale.
37    *
38    * @param aLocale  The given locale.
39    * @param success  Indicates the status of ISO8601Calendar object construction.
40    *                 Returns U_ZERO_ERROR if constructed successfully.
41    * @internal
42    */
43   ISO8601Calendar(const Locale& aLocale, UErrorCode &success);
44 
45   /**
46    * Copy Constructor
47    * @internal
48    */
49   ISO8601Calendar(const ISO8601Calendar& other) = default;
50 
51   /**
52    * Destructor.
53    * @internal
54    */
55   virtual ~ISO8601Calendar();
56 
57   /**
58    * Clone.
59    * @internal
60    */
61   virtual ISO8601Calendar* clone() const override;
62 
63   // UObject stuff
64  public:
65   /**
66    * @return   The class ID for this object. All objects of a given class have the
67    *           same class ID. Objects of other classes have different class IDs.
68    * @internal
69    */
70   virtual UClassID getDynamicClassID() const override;
71 
72   /**
73    * Return the class ID for this class. This is useful only for comparing to a return
74    * value from getDynamicClassID(). For example:
75    *
76    *      Base* polymorphic_pointer = createPolymorphicObject();
77    *      if (polymorphic_pointer->getDynamicClassID() ==
78    *          Derived::getStaticClassID()) ...
79    *
80    * @return   The class ID for all objects of this class.
81    * @internal
82    */
83   U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
84 
85   /**
86    * return the calendar type, "iso8601".
87    *
88    * @return calendar type
89    * @internal
90    */
91   virtual const char * getType() const override;
92 
93  protected:
isEra0CountingBackward()94   virtual bool isEra0CountingBackward() const override { return false; }
95 
96  private:
97 
98   ISO8601Calendar(); // default constructor not implemented
99 };
100 
101 U_NAMESPACE_END
102 
103 #endif
104 #endif
105