]>
Commit | Line | Data |
---|---|---|
f3c0d7a5 A |
1 | // © 2016 and later: Unicode, Inc. and others. |
2 | // License & terms of use: http://www.unicode.org/copyright.html | |
46f4442e A |
3 | /* |
4 | ******************************************************************************* | |
5 | * Copyright (C) 2007-2008, International Business Machines Corporation and * | |
6 | * others. All Rights Reserved. * | |
7 | ******************************************************************************* | |
8 | */ | |
9 | #ifndef TZRULE_H | |
10 | #define TZRULE_H | |
11 | ||
12 | /** | |
13 | * \file | |
14 | * \brief C++ API: Time zone rule classes | |
15 | */ | |
16 | ||
17 | #include "unicode/utypes.h" | |
18 | ||
340931cb A |
19 | #if U_SHOW_CPLUSPLUS_API |
20 | ||
46f4442e A |
21 | #if !UCONFIG_NO_FORMATTING |
22 | ||
23 | #include "unicode/uobject.h" | |
24 | #include "unicode/unistr.h" | |
25 | #include "unicode/dtrule.h" | |
26 | ||
27 | U_NAMESPACE_BEGIN | |
28 | ||
29 | /** | |
30 | * <code>TimeZoneRule</code> is a class representing a rule for time zone. | |
31 | * <code>TimeZoneRule</code> has a set of time zone attributes, such as zone name, | |
32 | * raw offset (UTC offset for standard time) and daylight saving time offset. | |
33 | * | |
729e4ab9 | 34 | * @stable ICU 3.8 |
46f4442e A |
35 | */ |
36 | class U_I18N_API TimeZoneRule : public UObject { | |
37 | public: | |
38 | /** | |
39 | * Destructor. | |
729e4ab9 | 40 | * @stable ICU 3.8 |
46f4442e A |
41 | */ |
42 | virtual ~TimeZoneRule(); | |
43 | ||
44 | /** | |
45 | * Clone this TimeZoneRule object polymorphically. The caller owns the result and | |
46 | * should delete it when done. | |
47 | * @return A copy of the object. | |
729e4ab9 | 48 | * @stable ICU 3.8 |
46f4442e | 49 | */ |
340931cb | 50 | virtual TimeZoneRule* clone() const = 0; |
46f4442e A |
51 | |
52 | /** | |
53 | * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects | |
54 | * of different subclasses are considered unequal. | |
55 | * @param that The object to be compared with. | |
56 | * @return true if the given <code>TimeZoneRule</code> objects are semantically equal. | |
729e4ab9 | 57 | * @stable ICU 3.8 |
46f4442e A |
58 | */ |
59 | virtual UBool operator==(const TimeZoneRule& that) const; | |
60 | ||
61 | /** | |
62 | * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects | |
63 | * of different subclasses are considered unequal. | |
64 | * @param that The object to be compared with. | |
65 | * @return true if the given <code>TimeZoneRule</code> objects are semantically unequal. | |
729e4ab9 | 66 | * @stable ICU 3.8 |
46f4442e A |
67 | */ |
68 | virtual UBool operator!=(const TimeZoneRule& that) const; | |
69 | ||
70 | /** | |
71 | * Fills in "name" with the name of this time zone. | |
72 | * @param name Receives the name of this time zone. | |
73 | * @return A reference to "name" | |
729e4ab9 | 74 | * @stable ICU 3.8 |
46f4442e A |
75 | */ |
76 | UnicodeString& getName(UnicodeString& name) const; | |
77 | ||
78 | /** | |
79 | * Gets the standard time offset. | |
80 | * @return The standard time offset from UTC in milliseconds. | |
729e4ab9 | 81 | * @stable ICU 3.8 |
46f4442e A |
82 | */ |
83 | int32_t getRawOffset(void) const; | |
84 | ||
85 | /** | |
86 | * Gets the amount of daylight saving delta time from the standard time. | |
87 | * @return The amount of daylight saving offset used by this rule | |
88 | * in milliseconds. | |
729e4ab9 | 89 | * @stable ICU 3.8 |
46f4442e A |
90 | */ |
91 | int32_t getDSTSavings(void) const; | |
92 | ||
93 | /** | |
94 | * Returns if this rule represents the same rule and offsets as another. | |
95 | * When two <code>TimeZoneRule</code> objects differ only its names, this method | |
96 | * returns true. | |
97 | * @param other The <code>TimeZoneRule</code> object to be compared with. | |
98 | * @return true if the other <code>TimeZoneRule</code> is the same as this one. | |
729e4ab9 | 99 | * @stable ICU 3.8 |
46f4442e A |
100 | */ |
101 | virtual UBool isEquivalentTo(const TimeZoneRule& other) const; | |
102 | ||
103 | /** | |
104 | * Gets the very first time when this rule takes effect. | |
105 | * @param prevRawOffset The standard time offset from UTC before this rule | |
106 | * takes effect in milliseconds. | |
107 | * @param prevDSTSavings The amount of daylight saving offset from the | |
108 | * standard time. | |
109 | * @param result Receives the very first time when this rule takes effect. | |
110 | * @return true if the start time is available. When false is returned, output parameter | |
111 | * "result" is unchanged. | |
729e4ab9 | 112 | * @stable ICU 3.8 |
46f4442e A |
113 | */ |
114 | virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0; | |
115 | ||
116 | /** | |
117 | * Gets the final time when this rule takes effect. | |
118 | * @param prevRawOffset The standard time offset from UTC before this rule | |
119 | * takes effect in milliseconds. | |
120 | * @param prevDSTSavings The amount of daylight saving offset from the | |
121 | * standard time. | |
122 | * @param result Receives the final time when this rule takes effect. | |
123 | * @return true if the start time is available. When false is returned, output parameter | |
124 | * "result" is unchanged. | |
729e4ab9 | 125 | * @stable ICU 3.8 |
46f4442e A |
126 | */ |
127 | virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0; | |
128 | ||
129 | /** | |
130 | * Gets the first time when this rule takes effect after the specified time. | |
131 | * @param base The first start time after this base time will be returned. | |
132 | * @param prevRawOffset The standard time offset from UTC before this rule | |
133 | * takes effect in milliseconds. | |
134 | * @param prevDSTSavings The amount of daylight saving offset from the | |
135 | * standard time. | |
136 | * @param inclusive Whether the base time is inclusive or not. | |
137 | * @param result Receives The first time when this rule takes effect after | |
138 | * the specified base time. | |
139 | * @return true if the start time is available. When false is returned, output parameter | |
140 | * "result" is unchanged. | |
729e4ab9 | 141 | * @stable ICU 3.8 |
46f4442e A |
142 | */ |
143 | virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
144 | UBool inclusive, UDate& result) const = 0; | |
145 | ||
146 | /** | |
147 | * Gets the most recent time when this rule takes effect before the specified time. | |
148 | * @param base The most recent time before this base time will be returned. | |
149 | * @param prevRawOffset The standard time offset from UTC before this rule | |
150 | * takes effect in milliseconds. | |
151 | * @param prevDSTSavings The amount of daylight saving offset from the | |
152 | * standard time. | |
153 | * @param inclusive Whether the base time is inclusive or not. | |
154 | * @param result Receives The most recent time when this rule takes effect before | |
155 | * the specified base time. | |
156 | * @return true if the start time is available. When false is returned, output parameter | |
157 | * "result" is unchanged. | |
729e4ab9 | 158 | * @stable ICU 3.8 |
46f4442e A |
159 | */ |
160 | virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
161 | UBool inclusive, UDate& result) const = 0; | |
162 | ||
163 | protected: | |
164 | ||
165 | /** | |
166 | * Constructs a <code>TimeZoneRule</code> with the name, the GMT offset of its | |
167 | * standard time and the amount of daylight saving offset adjustment. | |
168 | * @param name The time zone name. | |
169 | * @param rawOffset The UTC offset of its standard time in milliseconds. | |
170 | * @param dstSavings The amount of daylight saving offset adjustment in milliseconds. | |
171 | * If this ia a rule for standard time, the value of this argument is 0. | |
729e4ab9 | 172 | * @stable ICU 3.8 |
46f4442e A |
173 | */ |
174 | TimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings); | |
175 | ||
176 | /** | |
177 | * Copy constructor. | |
178 | * @param source The TimeZoneRule object to be copied. | |
729e4ab9 | 179 | * @stable ICU 3.8 |
46f4442e A |
180 | */ |
181 | TimeZoneRule(const TimeZoneRule& source); | |
182 | ||
183 | /** | |
184 | * Assignment operator. | |
185 | * @param right The object to be copied. | |
729e4ab9 | 186 | * @stable ICU 3.8 |
46f4442e A |
187 | */ |
188 | TimeZoneRule& operator=(const TimeZoneRule& right); | |
189 | ||
190 | private: | |
191 | UnicodeString fName; // time name | |
192 | int32_t fRawOffset; // UTC offset of the standard time in milliseconds | |
193 | int32_t fDSTSavings; // DST saving amount in milliseconds | |
194 | }; | |
195 | ||
196 | /** | |
197 | * <code>InitialTimeZoneRule</code> represents a time zone rule | |
198 | * representing a time zone effective from the beginning and | |
199 | * has no actual start times. | |
729e4ab9 | 200 | * @stable ICU 3.8 |
46f4442e A |
201 | */ |
202 | class U_I18N_API InitialTimeZoneRule : public TimeZoneRule { | |
203 | public: | |
204 | /** | |
205 | * Constructs an <code>InitialTimeZoneRule</code> with the name, the GMT offset of its | |
206 | * standard time and the amount of daylight saving offset adjustment. | |
207 | * @param name The time zone name. | |
208 | * @param rawOffset The UTC offset of its standard time in milliseconds. | |
209 | * @param dstSavings The amount of daylight saving offset adjustment in milliseconds. | |
210 | * If this ia a rule for standard time, the value of this argument is 0. | |
729e4ab9 | 211 | * @stable ICU 3.8 |
46f4442e A |
212 | */ |
213 | InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings); | |
214 | ||
215 | /** | |
216 | * Copy constructor. | |
217 | * @param source The InitialTimeZoneRule object to be copied. | |
729e4ab9 | 218 | * @stable ICU 3.8 |
46f4442e A |
219 | */ |
220 | InitialTimeZoneRule(const InitialTimeZoneRule& source); | |
221 | ||
222 | /** | |
223 | * Destructor. | |
729e4ab9 | 224 | * @stable ICU 3.8 |
46f4442e A |
225 | */ |
226 | virtual ~InitialTimeZoneRule(); | |
227 | ||
228 | /** | |
229 | * Clone this InitialTimeZoneRule object polymorphically. The caller owns the result and | |
230 | * should delete it when done. | |
231 | * @return A copy of the object. | |
729e4ab9 | 232 | * @stable ICU 3.8 |
46f4442e | 233 | */ |
340931cb | 234 | virtual InitialTimeZoneRule* clone() const; |
46f4442e A |
235 | |
236 | /** | |
237 | * Assignment operator. | |
238 | * @param right The object to be copied. | |
729e4ab9 | 239 | * @stable ICU 3.8 |
46f4442e A |
240 | */ |
241 | InitialTimeZoneRule& operator=(const InitialTimeZoneRule& right); | |
242 | ||
243 | /** | |
244 | * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects | |
245 | * of different subclasses are considered unequal. | |
246 | * @param that The object to be compared with. | |
247 | * @return true if the given <code>TimeZoneRule</code> objects are semantically equal. | |
729e4ab9 | 248 | * @stable ICU 3.8 |
46f4442e A |
249 | */ |
250 | virtual UBool operator==(const TimeZoneRule& that) const; | |
251 | ||
252 | /** | |
253 | * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects | |
254 | * of different subclasses are considered unequal. | |
255 | * @param that The object to be compared with. | |
256 | * @return true if the given <code>TimeZoneRule</code> objects are semantically unequal. | |
729e4ab9 | 257 | * @stable ICU 3.8 |
46f4442e A |
258 | */ |
259 | virtual UBool operator!=(const TimeZoneRule& that) const; | |
260 | ||
261 | /** | |
262 | * Gets the time when this rule takes effect in the given year. | |
263 | * @param year The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc. | |
264 | * @param prevRawOffset The standard time offset from UTC before this rule | |
265 | * takes effect in milliseconds. | |
266 | * @param prevDSTSavings The amount of daylight saving offset from the | |
267 | * standard time. | |
268 | * @param result Receives the start time in the year. | |
269 | * @return true if this rule takes effect in the year and the result is set to | |
270 | * "result". | |
729e4ab9 | 271 | * @stable ICU 3.8 |
46f4442e A |
272 | */ |
273 | UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
274 | ||
275 | /** | |
276 | * Returns if this rule represents the same rule and offsets as another. | |
277 | * When two <code>TimeZoneRule</code> objects differ only its names, this method | |
278 | * returns true. | |
279 | * @param that The <code>TimeZoneRule</code> object to be compared with. | |
280 | * @return true if the other <code>TimeZoneRule</code> is equivalent to this one. | |
729e4ab9 | 281 | * @stable ICU 3.8 |
46f4442e A |
282 | */ |
283 | virtual UBool isEquivalentTo(const TimeZoneRule& that) const; | |
284 | ||
285 | /** | |
286 | * Gets the very first time when this rule takes effect. | |
287 | * @param prevRawOffset The standard time offset from UTC before this rule | |
288 | * takes effect in milliseconds. | |
289 | * @param prevDSTSavings The amount of daylight saving offset from the | |
290 | * standard time. | |
291 | * @param result Receives the very first time when this rule takes effect. | |
292 | * @return true if the start time is available. When false is returned, output parameter | |
293 | * "result" is unchanged. | |
729e4ab9 | 294 | * @stable ICU 3.8 |
46f4442e A |
295 | */ |
296 | virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
297 | ||
298 | /** | |
299 | * Gets the final time when this rule takes effect. | |
300 | * @param prevRawOffset The standard time offset from UTC before this rule | |
301 | * takes effect in milliseconds. | |
302 | * @param prevDSTSavings The amount of daylight saving offset from the | |
303 | * standard time. | |
304 | * @param result Receives the final time when this rule takes effect. | |
305 | * @return true if the start time is available. When false is returned, output parameter | |
306 | * "result" is unchanged. | |
729e4ab9 | 307 | * @stable ICU 3.8 |
46f4442e A |
308 | */ |
309 | virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
310 | ||
311 | /** | |
312 | * Gets the first time when this rule takes effect after the specified time. | |
313 | * @param base The first start time after this base time will be returned. | |
314 | * @param prevRawOffset The standard time offset from UTC before this rule | |
315 | * takes effect in milliseconds. | |
316 | * @param prevDSTSavings The amount of daylight saving offset from the | |
317 | * standard time. | |
318 | * @param inclusive Whether the base time is inclusive or not. | |
319 | * @param result Receives The first time when this rule takes effect after | |
320 | * the specified base time. | |
321 | * @return true if the start time is available. When false is returned, output parameter | |
322 | * "result" is unchanged. | |
729e4ab9 | 323 | * @stable ICU 3.8 |
46f4442e A |
324 | */ |
325 | virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
326 | UBool inclusive, UDate& result) const; | |
327 | ||
328 | /** | |
329 | * Gets the most recent time when this rule takes effect before the specified time. | |
330 | * @param base The most recent time before this base time will be returned. | |
331 | * @param prevRawOffset The standard time offset from UTC before this rule | |
332 | * takes effect in milliseconds. | |
333 | * @param prevDSTSavings The amount of daylight saving offset from the | |
334 | * standard time. | |
335 | * @param inclusive Whether the base time is inclusive or not. | |
336 | * @param result Receives The most recent time when this rule takes effect before | |
337 | * the specified base time. | |
338 | * @return true if the start time is available. When false is returned, output parameter | |
339 | * "result" is unchanged. | |
729e4ab9 | 340 | * @stable ICU 3.8 |
46f4442e A |
341 | */ |
342 | virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
343 | UBool inclusive, UDate& result) const; | |
344 | ||
345 | public: | |
346 | /** | |
347 | * Return the class ID for this class. This is useful only for comparing to | |
348 | * a return value from getDynamicClassID(). For example: | |
349 | * <pre> | |
350 | * . Base* polymorphic_pointer = createPolymorphicObject(); | |
351 | * . if (polymorphic_pointer->getDynamicClassID() == | |
352 | * . erived::getStaticClassID()) ... | |
353 | * </pre> | |
354 | * @return The class ID for all objects of this class. | |
729e4ab9 | 355 | * @stable ICU 3.8 |
46f4442e A |
356 | */ |
357 | static UClassID U_EXPORT2 getStaticClassID(void); | |
358 | ||
359 | /** | |
360 | * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This | |
361 | * method is to implement a simple version of RTTI, since not all C++ | |
362 | * compilers support genuine RTTI. Polymorphic operator==() and clone() | |
363 | * methods call this method. | |
364 | * | |
365 | * @return The class ID for this object. All objects of a | |
366 | * given class have the same class ID. Objects of | |
367 | * other classes have different class IDs. | |
729e4ab9 | 368 | * @stable ICU 3.8 |
46f4442e A |
369 | */ |
370 | virtual UClassID getDynamicClassID(void) const; | |
371 | }; | |
372 | ||
373 | /** | |
374 | * <code>AnnualTimeZoneRule</code> is a class used for representing a time zone | |
375 | * rule which takes effect annually. The calenday system used for the rule is | |
376 | * is based on Gregorian calendar | |
377 | * | |
729e4ab9 | 378 | * @stable ICU 3.8 |
46f4442e A |
379 | */ |
380 | class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule { | |
381 | public: | |
382 | /** | |
383 | * The constant representing the maximum year used for designating | |
384 | * a rule is permanent. | |
385 | */ | |
386 | static const int32_t MAX_YEAR; | |
387 | ||
388 | /** | |
389 | * Constructs a <code>AnnualTimeZoneRule</code> with the name, the GMT offset of its | |
390 | * standard time, the amount of daylight saving offset adjustment, the annual start | |
391 | * time rule and the start/until years. The input DateTimeRule is copied by this | |
392 | * constructor, so the caller remains responsible for deleting the object. | |
393 | * @param name The time zone name. | |
394 | * @param rawOffset The GMT offset of its standard time in milliseconds. | |
395 | * @param dstSavings The amount of daylight saving offset adjustment in | |
396 | * milliseconds. If this ia a rule for standard time, | |
397 | * the value of this argument is 0. | |
398 | * @param dateTimeRule The start date/time rule repeated annually. | |
399 | * @param startYear The first year when this rule takes effect. | |
400 | * @param endYear The last year when this rule takes effect. If this | |
401 | * rule is effective forever in future, specify MAX_YEAR. | |
729e4ab9 | 402 | * @stable ICU 3.8 |
46f4442e A |
403 | */ |
404 | AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings, | |
405 | const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear); | |
406 | ||
407 | /** | |
408 | * Constructs a <code>AnnualTimeZoneRule</code> with the name, the GMT offset of its | |
409 | * standard time, the amount of daylight saving offset adjustment, the annual start | |
410 | * time rule and the start/until years. The input DateTimeRule object is adopted | |
411 | * by this object, therefore, the caller must not delete the object. | |
412 | * @param name The time zone name. | |
413 | * @param rawOffset The GMT offset of its standard time in milliseconds. | |
414 | * @param dstSavings The amount of daylight saving offset adjustment in | |
415 | * milliseconds. If this ia a rule for standard time, | |
416 | * the value of this argument is 0. | |
417 | * @param dateTimeRule The start date/time rule repeated annually. | |
418 | * @param startYear The first year when this rule takes effect. | |
419 | * @param endYear The last year when this rule takes effect. If this | |
420 | * rule is effective forever in future, specify MAX_YEAR. | |
729e4ab9 | 421 | * @stable ICU 3.8 |
46f4442e A |
422 | */ |
423 | AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings, | |
424 | DateTimeRule* dateTimeRule, int32_t startYear, int32_t endYear); | |
425 | ||
426 | /** | |
427 | * Copy constructor. | |
428 | * @param source The AnnualTimeZoneRule object to be copied. | |
729e4ab9 | 429 | * @stable ICU 3.8 |
46f4442e A |
430 | */ |
431 | AnnualTimeZoneRule(const AnnualTimeZoneRule& source); | |
432 | ||
433 | /** | |
434 | * Destructor. | |
729e4ab9 | 435 | * @stable ICU 3.8 |
46f4442e A |
436 | */ |
437 | virtual ~AnnualTimeZoneRule(); | |
438 | ||
439 | /** | |
440 | * Clone this AnnualTimeZoneRule object polymorphically. The caller owns the result and | |
441 | * should delete it when done. | |
442 | * @return A copy of the object. | |
729e4ab9 | 443 | * @stable ICU 3.8 |
46f4442e | 444 | */ |
340931cb | 445 | virtual AnnualTimeZoneRule* clone() const; |
46f4442e A |
446 | |
447 | /** | |
448 | * Assignment operator. | |
449 | * @param right The object to be copied. | |
729e4ab9 | 450 | * @stable ICU 3.8 |
46f4442e A |
451 | */ |
452 | AnnualTimeZoneRule& operator=(const AnnualTimeZoneRule& right); | |
453 | ||
454 | /** | |
455 | * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects | |
456 | * of different subclasses are considered unequal. | |
457 | * @param that The object to be compared with. | |
458 | * @return true if the given <code>TimeZoneRule</code> objects are semantically equal. | |
729e4ab9 | 459 | * @stable ICU 3.8 |
46f4442e A |
460 | */ |
461 | virtual UBool operator==(const TimeZoneRule& that) const; | |
462 | ||
463 | /** | |
464 | * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects | |
465 | * of different subclasses are considered unequal. | |
466 | * @param that The object to be compared with. | |
467 | * @return true if the given <code>TimeZoneRule</code> objects are semantically unequal. | |
729e4ab9 | 468 | * @stable ICU 3.8 |
46f4442e A |
469 | */ |
470 | virtual UBool operator!=(const TimeZoneRule& that) const; | |
471 | ||
472 | /** | |
473 | * Gets the start date/time rule used by this rule. | |
474 | * @return The <code>AnnualDateTimeRule</code> which represents the start date/time | |
475 | * rule used by this time zone rule. | |
729e4ab9 | 476 | * @stable ICU 3.8 |
46f4442e A |
477 | */ |
478 | const DateTimeRule* getRule(void) const; | |
479 | ||
480 | /** | |
481 | * Gets the first year when this rule takes effect. | |
482 | * @return The start year of this rule. The year is in Gregorian calendar | |
483 | * with 0 == 1 BCE, -1 == 2 BCE, etc. | |
729e4ab9 | 484 | * @stable ICU 3.8 |
46f4442e A |
485 | */ |
486 | int32_t getStartYear(void) const; | |
487 | ||
488 | /** | |
489 | * Gets the end year when this rule takes effect. | |
490 | * @return The end year of this rule (inclusive). The year is in Gregorian calendar | |
491 | * with 0 == 1 BCE, -1 == 2 BCE, etc. | |
729e4ab9 | 492 | * @stable ICU 3.8 |
46f4442e A |
493 | */ |
494 | int32_t getEndYear(void) const; | |
495 | ||
496 | /** | |
497 | * Gets the time when this rule takes effect in the given year. | |
498 | * @param year The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc. | |
499 | * @param prevRawOffset The standard time offset from UTC before this rule | |
500 | * takes effect in milliseconds. | |
501 | * @param prevDSTSavings The amount of daylight saving offset from the | |
502 | * standard time. | |
503 | * @param result Receives the start time in the year. | |
504 | * @return true if this rule takes effect in the year and the result is set to | |
505 | * "result". | |
729e4ab9 | 506 | * @stable ICU 3.8 |
46f4442e A |
507 | */ |
508 | UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
509 | ||
510 | /** | |
511 | * Returns if this rule represents the same rule and offsets as another. | |
512 | * When two <code>TimeZoneRule</code> objects differ only its names, this method | |
513 | * returns true. | |
514 | * @param that The <code>TimeZoneRule</code> object to be compared with. | |
515 | * @return true if the other <code>TimeZoneRule</code> is equivalent to this one. | |
729e4ab9 | 516 | * @stable ICU 3.8 |
46f4442e A |
517 | */ |
518 | virtual UBool isEquivalentTo(const TimeZoneRule& that) const; | |
519 | ||
520 | /** | |
521 | * Gets the very first time when this rule takes effect. | |
522 | * @param prevRawOffset The standard time offset from UTC before this rule | |
523 | * takes effect in milliseconds. | |
524 | * @param prevDSTSavings The amount of daylight saving offset from the | |
525 | * standard time. | |
526 | * @param result Receives the very first time when this rule takes effect. | |
527 | * @return true if the start time is available. When false is returned, output parameter | |
528 | * "result" is unchanged. | |
729e4ab9 | 529 | * @stable ICU 3.8 |
46f4442e A |
530 | */ |
531 | virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
532 | ||
533 | /** | |
534 | * Gets the final time when this rule takes effect. | |
535 | * @param prevRawOffset The standard time offset from UTC before this rule | |
536 | * takes effect in milliseconds. | |
537 | * @param prevDSTSavings The amount of daylight saving offset from the | |
538 | * standard time. | |
539 | * @param result Receives the final time when this rule takes effect. | |
540 | * @return true if the start time is available. When false is returned, output parameter | |
541 | * "result" is unchanged. | |
729e4ab9 | 542 | * @stable ICU 3.8 |
46f4442e A |
543 | */ |
544 | virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
545 | ||
546 | /** | |
547 | * Gets the first time when this rule takes effect after the specified time. | |
548 | * @param base The first start time after this base time will be returned. | |
549 | * @param prevRawOffset The standard time offset from UTC before this rule | |
550 | * takes effect in milliseconds. | |
551 | * @param prevDSTSavings The amount of daylight saving offset from the | |
552 | * standard time. | |
553 | * @param inclusive Whether the base time is inclusive or not. | |
554 | * @param result Receives The first time when this rule takes effect after | |
555 | * the specified base time. | |
556 | * @return true if the start time is available. When false is returned, output parameter | |
557 | * "result" is unchanged. | |
729e4ab9 | 558 | * @stable ICU 3.8 |
46f4442e A |
559 | */ |
560 | virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
561 | UBool inclusive, UDate& result) const; | |
562 | ||
563 | /** | |
564 | * Gets the most recent time when this rule takes effect before the specified time. | |
565 | * @param base The most recent time before this base time will be returned. | |
566 | * @param prevRawOffset The standard time offset from UTC before this rule | |
567 | * takes effect in milliseconds. | |
568 | * @param prevDSTSavings The amount of daylight saving offset from the | |
569 | * standard time. | |
570 | * @param inclusive Whether the base time is inclusive or not. | |
571 | * @param result Receives The most recent time when this rule takes effect before | |
572 | * the specified base time. | |
573 | * @return true if the start time is available. When false is returned, output parameter | |
574 | * "result" is unchanged. | |
729e4ab9 | 575 | * @stable ICU 3.8 |
46f4442e A |
576 | */ |
577 | virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
578 | UBool inclusive, UDate& result) const; | |
579 | ||
580 | ||
581 | private: | |
582 | DateTimeRule* fDateTimeRule; | |
583 | int32_t fStartYear; | |
584 | int32_t fEndYear; | |
585 | ||
586 | public: | |
587 | /** | |
588 | * Return the class ID for this class. This is useful only for comparing to | |
589 | * a return value from getDynamicClassID(). For example: | |
590 | * <pre> | |
591 | * . Base* polymorphic_pointer = createPolymorphicObject(); | |
592 | * . if (polymorphic_pointer->getDynamicClassID() == | |
593 | * . erived::getStaticClassID()) ... | |
594 | * </pre> | |
595 | * @return The class ID for all objects of this class. | |
729e4ab9 | 596 | * @stable ICU 3.8 |
46f4442e A |
597 | */ |
598 | static UClassID U_EXPORT2 getStaticClassID(void); | |
599 | ||
600 | /** | |
601 | * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This | |
602 | * method is to implement a simple version of RTTI, since not all C++ | |
603 | * compilers support genuine RTTI. Polymorphic operator==() and clone() | |
604 | * methods call this method. | |
605 | * | |
606 | * @return The class ID for this object. All objects of a | |
607 | * given class have the same class ID. Objects of | |
608 | * other classes have different class IDs. | |
729e4ab9 | 609 | * @stable ICU 3.8 |
46f4442e A |
610 | */ |
611 | virtual UClassID getDynamicClassID(void) const; | |
612 | }; | |
613 | ||
614 | /** | |
615 | * <code>TimeArrayTimeZoneRule</code> represents a time zone rule whose start times are | |
616 | * defined by an array of milliseconds since the standard base time. | |
617 | * | |
729e4ab9 | 618 | * @stable ICU 3.8 |
46f4442e A |
619 | */ |
620 | class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule { | |
621 | public: | |
622 | /** | |
623 | * Constructs a <code>TimeArrayTimeZoneRule</code> with the name, the GMT offset of its | |
624 | * standard time, the amount of daylight saving offset adjustment and | |
625 | * the array of times when this rule takes effect. | |
626 | * @param name The time zone name. | |
627 | * @param rawOffset The UTC offset of its standard time in milliseconds. | |
628 | * @param dstSavings The amount of daylight saving offset adjustment in | |
629 | * milliseconds. If this ia a rule for standard time, | |
630 | * the value of this argument is 0. | |
631 | * @param startTimes The array start times in milliseconds since the base time | |
632 | * (January 1, 1970, 00:00:00). | |
633 | * @param numStartTimes The number of elements in the parameter "startTimes" | |
634 | * @param timeRuleType The time type of the start times, which is one of | |
635 | * <code>DataTimeRule::WALL_TIME</code>, <code>STANDARD_TIME</code> | |
636 | * and <code>UTC_TIME</code>. | |
729e4ab9 | 637 | * @stable ICU 3.8 |
46f4442e A |
638 | */ |
639 | TimeArrayTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings, | |
640 | const UDate* startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType); | |
641 | ||
642 | /** | |
643 | * Copy constructor. | |
644 | * @param source The TimeArrayTimeZoneRule object to be copied. | |
729e4ab9 | 645 | * @stable ICU 3.8 |
46f4442e A |
646 | */ |
647 | TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule& source); | |
648 | ||
649 | /** | |
650 | * Destructor. | |
729e4ab9 | 651 | * @stable ICU 3.8 |
46f4442e A |
652 | */ |
653 | virtual ~TimeArrayTimeZoneRule(); | |
654 | ||
655 | /** | |
656 | * Clone this TimeArrayTimeZoneRule object polymorphically. The caller owns the result and | |
657 | * should delete it when done. | |
658 | * @return A copy of the object. | |
729e4ab9 | 659 | * @stable ICU 3.8 |
46f4442e | 660 | */ |
340931cb | 661 | virtual TimeArrayTimeZoneRule* clone() const; |
46f4442e A |
662 | |
663 | /** | |
664 | * Assignment operator. | |
665 | * @param right The object to be copied. | |
729e4ab9 | 666 | * @stable ICU 3.8 |
46f4442e A |
667 | */ |
668 | TimeArrayTimeZoneRule& operator=(const TimeArrayTimeZoneRule& right); | |
669 | ||
670 | /** | |
671 | * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects | |
672 | * of different subclasses are considered unequal. | |
673 | * @param that The object to be compared with. | |
674 | * @return true if the given <code>TimeZoneRule</code> objects are semantically equal. | |
729e4ab9 | 675 | * @stable ICU 3.8 |
46f4442e A |
676 | */ |
677 | virtual UBool operator==(const TimeZoneRule& that) const; | |
678 | ||
679 | /** | |
680 | * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects | |
681 | * of different subclasses are considered unequal. | |
682 | * @param that The object to be compared with. | |
683 | * @return true if the given <code>TimeZoneRule</code> objects are semantically unequal. | |
729e4ab9 | 684 | * @stable ICU 3.8 |
46f4442e A |
685 | */ |
686 | virtual UBool operator!=(const TimeZoneRule& that) const; | |
687 | ||
688 | /** | |
689 | * Gets the time type of the start times used by this rule. The return value | |
690 | * is either <code>DateTimeRule::WALL_TIME</code> or <code>STANDARD_TIME</code> | |
691 | * or <code>UTC_TIME</code>. | |
692 | * | |
693 | * @return The time type used of the start times used by this rule. | |
729e4ab9 | 694 | * @stable ICU 3.8 |
46f4442e A |
695 | */ |
696 | DateTimeRule::TimeRuleType getTimeType(void) const; | |
697 | ||
698 | /** | |
699 | * Gets a start time at the index stored in this rule. | |
700 | * @param index The index of start times | |
701 | * @param result Receives the start time at the index | |
702 | * @return true if the index is within the valid range and | |
703 | * and the result is set. When false, the output | |
704 | * parameger "result" is unchanged. | |
729e4ab9 | 705 | * @stable ICU 3.8 |
46f4442e A |
706 | */ |
707 | UBool getStartTimeAt(int32_t index, UDate& result) const; | |
708 | ||
709 | /** | |
710 | * Returns the number of start times stored in this rule | |
711 | * @return The number of start times. | |
729e4ab9 | 712 | * @stable ICU 3.8 |
46f4442e A |
713 | */ |
714 | int32_t countStartTimes(void) const; | |
715 | ||
716 | /** | |
717 | * Returns if this rule represents the same rule and offsets as another. | |
718 | * When two <code>TimeZoneRule</code> objects differ only its names, this method | |
719 | * returns true. | |
720 | * @param that The <code>TimeZoneRule</code> object to be compared with. | |
721 | * @return true if the other <code>TimeZoneRule</code> is equivalent to this one. | |
729e4ab9 | 722 | * @stable ICU 3.8 |
46f4442e A |
723 | */ |
724 | virtual UBool isEquivalentTo(const TimeZoneRule& that) const; | |
725 | ||
726 | /** | |
727 | * Gets the very first time when this rule takes effect. | |
728 | * @param prevRawOffset The standard time offset from UTC before this rule | |
729 | * takes effect in milliseconds. | |
730 | * @param prevDSTSavings The amount of daylight saving offset from the | |
731 | * standard time. | |
732 | * @param result Receives the very first time when this rule takes effect. | |
733 | * @return true if the start time is available. When false is returned, output parameter | |
734 | * "result" is unchanged. | |
729e4ab9 | 735 | * @stable ICU 3.8 |
46f4442e A |
736 | */ |
737 | virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
738 | ||
739 | /** | |
740 | * Gets the final time when this rule takes effect. | |
741 | * @param prevRawOffset The standard time offset from UTC before this rule | |
742 | * takes effect in milliseconds. | |
743 | * @param prevDSTSavings The amount of daylight saving offset from the | |
744 | * standard time. | |
745 | * @param result Receives the final time when this rule takes effect. | |
746 | * @return true if the start time is available. When false is returned, output parameter | |
747 | * "result" is unchanged. | |
729e4ab9 | 748 | * @stable ICU 3.8 |
46f4442e A |
749 | */ |
750 | virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; | |
751 | ||
752 | /** | |
753 | * Gets the first time when this rule takes effect after the specified time. | |
754 | * @param base The first start time after this base time will be returned. | |
755 | * @param prevRawOffset The standard time offset from UTC before this rule | |
756 | * takes effect in milliseconds. | |
757 | * @param prevDSTSavings The amount of daylight saving offset from the | |
758 | * standard time. | |
759 | * @param inclusive Whether the base time is inclusive or not. | |
760 | * @param result Receives The first time when this rule takes effect after | |
761 | * the specified base time. | |
762 | * @return true if the start time is available. When false is returned, output parameter | |
763 | * "result" is unchanged. | |
729e4ab9 | 764 | * @stable ICU 3.8 |
46f4442e A |
765 | */ |
766 | virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
767 | UBool inclusive, UDate& result) const; | |
768 | ||
769 | /** | |
770 | * Gets the most recent time when this rule takes effect before the specified time. | |
771 | * @param base The most recent time before this base time will be returned. | |
772 | * @param prevRawOffset The standard time offset from UTC before this rule | |
773 | * takes effect in milliseconds. | |
774 | * @param prevDSTSavings The amount of daylight saving offset from the | |
775 | * standard time. | |
776 | * @param inclusive Whether the base time is inclusive or not. | |
777 | * @param result Receives The most recent time when this rule takes effect before | |
778 | * the specified base time. | |
779 | * @return true if the start time is available. When false is returned, output parameter | |
780 | * "result" is unchanged. | |
729e4ab9 | 781 | * @stable ICU 3.8 |
46f4442e A |
782 | */ |
783 | virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, | |
784 | UBool inclusive, UDate& result) const; | |
785 | ||
786 | ||
787 | private: | |
788 | enum { TIMEARRAY_STACK_BUFFER_SIZE = 32 }; | |
789 | UBool initStartTimes(const UDate source[], int32_t size, UErrorCode& ec); | |
790 | UDate getUTC(UDate time, int32_t raw, int32_t dst) const; | |
791 | ||
792 | DateTimeRule::TimeRuleType fTimeRuleType; | |
793 | int32_t fNumStartTimes; | |
794 | UDate* fStartTimes; | |
795 | UDate fLocalStartTimes[TIMEARRAY_STACK_BUFFER_SIZE]; | |
796 | ||
797 | public: | |
798 | /** | |
799 | * Return the class ID for this class. This is useful only for comparing to | |
800 | * a return value from getDynamicClassID(). For example: | |
801 | * <pre> | |
802 | * . Base* polymorphic_pointer = createPolymorphicObject(); | |
803 | * . if (polymorphic_pointer->getDynamicClassID() == | |
804 | * . erived::getStaticClassID()) ... | |
805 | * </pre> | |
806 | * @return The class ID for all objects of this class. | |
729e4ab9 | 807 | * @stable ICU 3.8 |
46f4442e A |
808 | */ |
809 | static UClassID U_EXPORT2 getStaticClassID(void); | |
810 | ||
811 | /** | |
812 | * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This | |
813 | * method is to implement a simple version of RTTI, since not all C++ | |
814 | * compilers support genuine RTTI. Polymorphic operator==() and clone() | |
815 | * methods call this method. | |
816 | * | |
817 | * @return The class ID for this object. All objects of a | |
818 | * given class have the same class ID. Objects of | |
819 | * other classes have different class IDs. | |
729e4ab9 | 820 | * @stable ICU 3.8 |
46f4442e A |
821 | */ |
822 | virtual UClassID getDynamicClassID(void) const; | |
823 | }; | |
824 | ||
825 | ||
826 | U_NAMESPACE_END | |
827 | ||
828 | #endif /* #if !UCONFIG_NO_FORMATTING */ | |
829 | ||
340931cb A |
830 | #endif /* U_SHOW_CPLUSPLUS_API */ |
831 | ||
46f4442e A |
832 | #endif // TZRULE_H |
833 | ||
834 | //eof |