1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ******************************************************************************* 5 * Copyright (C) 2007-2008, International Business Machines Corporation and * 6 * others. All Rights Reserved. * 7 ******************************************************************************* 8 */ 9 #ifndef DTRULE_H 10 #define DTRULE_H 11 12 #include "unicode/utypes.h" 13 14 #if U_SHOW_CPLUSPLUS_API 15 16 /** 17 * \file 18 * \brief C++ API: Rule for specifying date and time in an year 19 */ 20 21 #if !UCONFIG_NO_FORMATTING 22 23 #include "unicode/uobject.h" 24 25 U_NAMESPACE_BEGIN 26 /** 27 * <code>DateTimeRule</code> is a class representing a time in a year by 28 * a rule specified by month, day of month, day of week and 29 * time in the day. 30 * 31 * @stable ICU 3.8 32 */ 33 class U_I18N_API DateTimeRule : public UObject { 34 public: 35 36 /** 37 * Date rule type constants. 38 * @stable ICU 3.8 39 */ 40 enum DateRuleType { 41 DOM = 0, /**< The exact day of month, 42 for example, March 11. */ 43 DOW, /**< The Nth occurrence of the day of week, 44 for example, 2nd Sunday in March. */ 45 DOW_GEQ_DOM, /**< The first occurrence of the day of week on or after the day of monnth, 46 for example, first Sunday on or after March 8. */ 47 DOW_LEQ_DOM /**< The last occurrence of the day of week on or before the day of month, 48 for example, first Sunday on or before March 14. */ 49 }; 50 51 /** 52 * Time rule type constants. 53 * @stable ICU 3.8 54 */ 55 enum TimeRuleType { 56 WALL_TIME = 0, /**< The local wall clock time */ 57 STANDARD_TIME, /**< The local standard time */ 58 UTC_TIME /**< The UTC time */ 59 }; 60 61 /** 62 * Constructs a <code>DateTimeRule</code> by the day of month and 63 * the time rule. The date rule type for an instance created by 64 * this constructor is <code>DOM</code>. 65 * 66 * @param month The rule month, for example, <code>Calendar::JANUARY</code> 67 * @param dayOfMonth The day of month, 1-based. 68 * @param millisInDay The milliseconds in the rule date. 69 * @param timeType The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code> 70 * or <code>UTC_TIME</code>. 71 * @stable ICU 3.8 72 */ 73 DateTimeRule(int32_t month, int32_t dayOfMonth, 74 int32_t millisInDay, TimeRuleType timeType); 75 76 /** 77 * Constructs a <code>DateTimeRule</code> by the day of week and its ordinal 78 * number and the time rule. The date rule type for an instance created 79 * by this constructor is <code>DOW</code>. 80 * 81 * @param month The rule month, for example, <code>Calendar::JANUARY</code>. 82 * @param weekInMonth The ordinal number of the day of week. Negative number 83 * may be used for specifying a rule date counted from the 84 * end of the rule month. 85 * @param dayOfWeek The day of week, for example, <code>Calendar::SUNDAY</code>. 86 * @param millisInDay The milliseconds in the rule date. 87 * @param timeType The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code> 88 * or <code>UTC_TIME</code>. 89 * @stable ICU 3.8 90 */ 91 DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek, 92 int32_t millisInDay, TimeRuleType timeType); 93 94 /** 95 * Constructs a <code>DateTimeRule</code> by the first/last day of week 96 * on or after/before the day of month and the time rule. The date rule 97 * type for an instance created by this constructor is either 98 * <code>DOM_GEQ_DOM</code> or <code>DOM_LEQ_DOM</code>. 99 * 100 * @param month The rule month, for example, <code>Calendar::JANUARY</code> 101 * @param dayOfMonth The day of month, 1-based. 102 * @param dayOfWeek The day of week, for example, <code>Calendar::SUNDAY</code>. 103 * @param after true if the rule date is on or after the day of month. 104 * @param millisInDay The milliseconds in the rule date. 105 * @param timeType The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code> 106 * or <code>UTC_TIME</code>. 107 * @stable ICU 3.8 108 */ 109 DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after, 110 int32_t millisInDay, TimeRuleType timeType); 111 112 /** 113 * Copy constructor. 114 * @param source The DateTimeRule object to be copied. 115 * @stable ICU 3.8 116 */ 117 DateTimeRule(const DateTimeRule& source); 118 119 /** 120 * Destructor. 121 * @stable ICU 3.8 122 */ 123 ~DateTimeRule(); 124 125 /** 126 * Clone this DateTimeRule object polymorphically. The caller owns the result and 127 * should delete it when done. 128 * @return A copy of the object. 129 * @stable ICU 3.8 130 */ 131 DateTimeRule* clone() const; 132 133 /** 134 * Assignment operator. 135 * @param right The object to be copied. 136 * @stable ICU 3.8 137 */ 138 DateTimeRule& operator=(const DateTimeRule& right); 139 140 /** 141 * Return true if the given DateTimeRule objects are semantically equal. Objects 142 * of different subclasses are considered unequal. 143 * @param that The object to be compared with. 144 * @return true if the given DateTimeRule objects are semantically equal. 145 * @stable ICU 3.8 146 */ 147 bool operator==(const DateTimeRule& that) const; 148 149 /** 150 * Return true if the given DateTimeRule objects are semantically unequal. Objects 151 * of different subclasses are considered unequal. 152 * @param that The object to be compared with. 153 * @return true if the given DateTimeRule objects are semantically unequal. 154 * @stable ICU 3.8 155 */ 156 bool operator!=(const DateTimeRule& that) const; 157 158 /** 159 * Gets the date rule type, such as <code>DOM</code> 160 * @return The date rule type. 161 * @stable ICU 3.8 162 */ 163 DateRuleType getDateRuleType(void) const; 164 165 /** 166 * Gets the time rule type 167 * @return The time rule type, either <code>WALL_TIME</code> or <code>STANDARD_TIME</code> 168 * or <code>UTC_TIME</code>. 169 * @stable ICU 3.8 170 */ 171 TimeRuleType getTimeRuleType(void) const; 172 173 /** 174 * Gets the rule month. 175 * @return The rule month. 176 * @stable ICU 3.8 177 */ 178 int32_t getRuleMonth(void) const; 179 180 /** 181 * Gets the rule day of month. When the date rule type 182 * is <code>DOW</code>, the value is always 0. 183 * @return The rule day of month 184 * @stable ICU 3.8 185 */ 186 int32_t getRuleDayOfMonth(void) const; 187 188 /** 189 * Gets the rule day of week. When the date rule type 190 * is <code>DOM</code>, the value is always 0. 191 * @return The rule day of week. 192 * @stable ICU 3.8 193 */ 194 int32_t getRuleDayOfWeek(void) const; 195 196 /** 197 * Gets the ordinal number of the occurrence of the day of week 198 * in the month. When the date rule type is not <code>DOW</code>, 199 * the value is always 0. 200 * @return The rule day of week ordinal number in the month. 201 * @stable ICU 3.8 202 */ 203 int32_t getRuleWeekInMonth(void) const; 204 205 /** 206 * Gets the rule time in the rule day. 207 * @return The time in the rule day in milliseconds. 208 * @stable ICU 3.8 209 */ 210 int32_t getRuleMillisInDay(void) const; 211 212 private: 213 int32_t fMonth; 214 int32_t fDayOfMonth; 215 int32_t fDayOfWeek; 216 int32_t fWeekInMonth; 217 int32_t fMillisInDay; 218 DateRuleType fDateRuleType; 219 TimeRuleType fTimeRuleType; 220 221 public: 222 /** 223 * Return the class ID for this class. This is useful only for comparing to 224 * a return value from getDynamicClassID(). For example: 225 * <pre> 226 * . Base* polymorphic_pointer = createPolymorphicObject(); 227 * . if (polymorphic_pointer->getDynamicClassID() == 228 * . erived::getStaticClassID()) ... 229 * </pre> 230 * @return The class ID for all objects of this class. 231 * @stable ICU 3.8 232 */ 233 static UClassID U_EXPORT2 getStaticClassID(void); 234 235 /** 236 * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 237 * method is to implement a simple version of RTTI, since not all C++ 238 * compilers support genuine RTTI. Polymorphic operator==() and clone() 239 * methods call this method. 240 * 241 * @return The class ID for this object. All objects of a 242 * given class have the same class ID. Objects of 243 * other classes have different class IDs. 244 * @stable ICU 3.8 245 */ 246 virtual UClassID getDynamicClassID(void) const override; 247 }; 248 249 U_NAMESPACE_END 250 251 #endif /* #if !UCONFIG_NO_FORMATTING */ 252 253 #endif /* U_SHOW_CPLUSPLUS_API */ 254 255 #endif // DTRULE_H 256 //eof 257