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