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