OLD | NEW |
| (Empty) |
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 nam
e, | |
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 resul
t 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 semantical
ly 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 semantic
ally 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 semantical
ly 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 semantic
ally 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 me
thod | |
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 ru
le | |
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 take
s effect. | |
106 * @return true if the start time is available. When false is returned, ou
tput parameter | |
107 * "result" is unchanged. | |
108 * @stable ICU 3.8 | |
109 */ | |
110 virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 ru
le | |
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 eff
ect. | |
119 * @return true if the start time is available. When false is returned, ou
tput parameter | |
120 * "result" is unchanged. | |
121 * @stable ICU 3.8 | |
122 */ | |
123 virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 b
e returned. | |
128 * @param prevRawOffset The standard time offset from UTC before this ru
le | |
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 eff
ect after | |
134 * the specified base time. | |
135 * @return true if the start time is available. When false is returned, ou
tput parameter | |
136 * "result" is unchanged. | |
137 * @stable ICU 3.8 | |
138 */ | |
139 virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDS
TSavings, | |
140 UBool inclusive, UDate& result) const = 0; | |
141 | |
142 /** | |
143 * Gets the most recent time when this rule takes effect before the specifie
d 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 ru
le | |
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 tak
es effect before | |
151 * the specified base time. | |
152 * @return true if the start time is available. When false is returned, ou
tput parameter | |
153 * "result" is unchanged. | |
154 * @stable ICU 3.8 | |
155 */ | |
156 virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t pr
evDSTSavings, | |
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 i
ts | |
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 m
illiseconds. | |
167 * If this ia a rule for standard time, the value of th
is argument is 0. | |
168 * @stable ICU 3.8 | |
169 */ | |
170 TimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSaving
s); | |
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 off
set 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 m
illiseconds. | |
206 * If this ia a rule for standard time, the value of th
is argument is 0. | |
207 * @stable ICU 3.8 | |
208 */ | |
209 InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t ds
tSavings); | |
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 th
e 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 semantical
ly 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 semantic
ally 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 semantical
ly 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 semantic
ally 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 ru
le | |
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 prevDSTSav
ings, 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 me
thod | |
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 thi
s 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 ru
le | |
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 take
s effect. | |
288 * @return true if the start time is available. When false is returned, ou
tput parameter | |
289 * "result" is unchanged. | |
290 * @stable ICU 3.8 | |
291 */ | |
292 virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 ru
le | |
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 eff
ect. | |
301 * @return true if the start time is available. When false is returned, ou
tput parameter | |
302 * "result" is unchanged. | |
303 * @stable ICU 3.8 | |
304 */ | |
305 virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 b
e returned. | |
310 * @param prevRawOffset The standard time offset from UTC before this ru
le | |
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 eff
ect after | |
316 * the specified base time. | |
317 * @return true if the start time is available. When false is returned, ou
tput parameter | |
318 * "result" is unchanged. | |
319 * @stable ICU 3.8 | |
320 */ | |
321 virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDS
TSavings, | |
322 UBool inclusive, UDate& result) const; | |
323 | |
324 /** | |
325 * Gets the most recent time when this rule takes effect before the specifie
d 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 ru
le | |
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 tak
es effect before | |
333 * the specified base time. | |
334 * @return true if the start time is available. When false is returned, ou
tput parameter | |
335 * "result" is unchanged. | |
336 * @stable ICU 3.8 | |
337 */ | |
338 virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t pr
evDSTSavings, | |
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 offse
t of its | |
386 * standard time, the amount of daylight saving offset adjustment, the annua
l 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_YEA
R. | |
398 * @stable ICU 3.8 | |
399 */ | |
400 AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dst
Savings, | |
401 const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear
); | |
402 | |
403 /** | |
404 * Constructs a <code>AnnualTimeZoneRule</code> with the name, the GMT offse
t of its | |
405 * standard time, the amount of daylight saving offset adjustment, the annua
l start | |
406 * time rule and the start/until years. The input DateTimeRule object is ad
opted | |
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_YEA
R. | |
417 * @stable ICU 3.8 | |
418 */ | |
419 AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dst
Savings, | |
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 semantical
ly 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 semantic
ally 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 semantical
ly 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 semantic
ally 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 d
ate/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 ru
le | |
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 prevDSTSav
ings, 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 me
thod | |
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 thi
s 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 ru
le | |
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 take
s effect. | |
523 * @return true if the start time is available. When false is returned, ou
tput parameter | |
524 * "result" is unchanged. | |
525 * @stable ICU 3.8 | |
526 */ | |
527 virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 ru
le | |
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 eff
ect. | |
536 * @return true if the start time is available. When false is returned, ou
tput parameter | |
537 * "result" is unchanged. | |
538 * @stable ICU 3.8 | |
539 */ | |
540 virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 b
e returned. | |
545 * @param prevRawOffset The standard time offset from UTC before this ru
le | |
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 eff
ect after | |
551 * the specified base time. | |
552 * @return true if the start time is available. When false is returned, ou
tput parameter | |
553 * "result" is unchanged. | |
554 * @stable ICU 3.8 | |
555 */ | |
556 virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDS
TSavings, | |
557 UBool inclusive, UDate& result) const; | |
558 | |
559 /** | |
560 * Gets the most recent time when this rule takes effect before the specifie
d 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 ru
le | |
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 tak
es effect before | |
568 * the specified base time. | |
569 * @return true if the start time is available. When false is returned, ou
tput parameter | |
570 * "result" is unchanged. | |
571 * @stable ICU 3.8 | |
572 */ | |
573 virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t pr
evDSTSavings, | |
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 ti
mes 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 of
fset 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::TimeRuleTy
pe 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 semantical
ly 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 semantic
ally 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 semantical
ly 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 semantic
ally 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 valu
e | |
686 * is either <code>DateTimeRule::WALL_TIME</code> or <code>STANDARD_TIME</co
de> | |
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 me
thod | |
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 thi
s 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 ru
le | |
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 take
s effect. | |
729 * @return true if the start time is available. When false is returned, ou
tput parameter | |
730 * "result" is unchanged. | |
731 * @stable ICU 3.8 | |
732 */ | |
733 virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 ru
le | |
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 eff
ect. | |
742 * @return true if the start time is available. When false is returned, ou
tput parameter | |
743 * "result" is unchanged. | |
744 * @stable ICU 3.8 | |
745 */ | |
746 virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, U
Date& 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 b
e returned. | |
751 * @param prevRawOffset The standard time offset from UTC before this ru
le | |
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 eff
ect after | |
757 * the specified base time. | |
758 * @return true if the start time is available. When false is returned, ou
tput parameter | |
759 * "result" is unchanged. | |
760 * @stable ICU 3.8 | |
761 */ | |
762 virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDS
TSavings, | |
763 UBool inclusive, UDate& result) const; | |
764 | |
765 /** | |
766 * Gets the most recent time when this rule takes effect before the specifie
d 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 ru
le | |
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 tak
es effect before | |
774 * the specified base time. | |
775 * @return true if the start time is available. When false is returned, ou
tput parameter | |
776 * "result" is unchanged. | |
777 * @stable ICU 3.8 | |
778 */ | |
779 virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t pr
evDSTSavings, | |
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 | |
OLD | NEW |