|
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 |