2 *******************************************************************************
3 * Copyright (C) 2007-2008, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
12 * \brief C++ API: Time zone rule classes
15 #include "unicode/utypes.h"
17 #if !UCONFIG_NO_FORMATTING
19 #include "unicode/uobject.h"
20 #include "unicode/unistr.h"
21 #include "unicode/dtrule.h"
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.
32 class U_I18N_API TimeZoneRule
: public UObject
{
38 virtual ~TimeZoneRule();
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.
46 virtual TimeZoneRule
* clone(void) const = 0;
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.
55 virtual UBool
operator==(const TimeZoneRule
& that
) const;
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.
64 virtual UBool
operator!=(const TimeZoneRule
& that
) const;
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"
72 UnicodeString
& getName(UnicodeString
& name
) const;
75 * Gets the standard time offset.
76 * @return The standard time offset from UTC in milliseconds.
79 int32_t getRawOffset(void) const;
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
87 int32_t getDSTSavings(void) const;
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
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.
97 virtual UBool
isEquivalentTo(const TimeZoneRule
& other
) const;
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
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.
110 virtual UBool
getFirstStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const = 0;
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
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.
123 virtual UBool
getFinalStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const = 0;
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
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.
139 virtual UBool
getNextStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
140 UBool inclusive
, UDate
& result
) const = 0;
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
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.
156 virtual UBool
getPreviousStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
157 UBool inclusive
, UDate
& result
) const = 0;
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.
170 TimeZoneRule(const UnicodeString
& name
, int32_t rawOffset
, int32_t dstSavings
);
174 * @param source The TimeZoneRule object to be copied.
177 TimeZoneRule(const TimeZoneRule
& source
);
180 * Assignment operator.
181 * @param right The object to be copied.
184 TimeZoneRule
& operator=(const TimeZoneRule
& right
);
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
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.
198 class U_I18N_API InitialTimeZoneRule
: public TimeZoneRule
{
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.
209 InitialTimeZoneRule(const UnicodeString
& name
, int32_t rawOffset
, int32_t dstSavings
);
213 * @param source The InitialTimeZoneRule object to be copied.
216 InitialTimeZoneRule(const InitialTimeZoneRule
& source
);
222 virtual ~InitialTimeZoneRule();
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.
230 virtual InitialTimeZoneRule
* clone(void) const;
233 * Assignment operator.
234 * @param right The object to be copied.
237 InitialTimeZoneRule
& operator=(const InitialTimeZoneRule
& right
);
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.
246 virtual UBool
operator==(const TimeZoneRule
& that
) const;
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.
255 virtual UBool
operator!=(const TimeZoneRule
& that
) const;
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
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
269 UBool
getStartInYear(int32_t year
, int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
279 virtual UBool
isEquivalentTo(const TimeZoneRule
& that
) const;
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
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.
292 virtual UBool
getFirstStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
305 virtual UBool
getFinalStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
321 virtual UBool
getNextStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
322 UBool inclusive
, UDate
& result
) const;
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
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.
338 virtual UBool
getPreviousStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
339 UBool inclusive
, UDate
& result
) const;
343 * Return the class ID for this class. This is useful only for comparing to
344 * a return value from getDynamicClassID(). For example:
346 * . Base* polymorphic_pointer = createPolymorphicObject();
347 * . if (polymorphic_pointer->getDynamicClassID() ==
348 * . erived::getStaticClassID()) ...
350 * @return The class ID for all objects of this class.
353 static UClassID U_EXPORT2
getStaticClassID(void);
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.
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.
366 virtual UClassID
getDynamicClassID(void) const;
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
376 class U_I18N_API AnnualTimeZoneRule
: public TimeZoneRule
{
379 * The constant representing the maximum year used for designating
380 * a rule is permanent.
382 static const int32_t MAX_YEAR
;
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.
400 AnnualTimeZoneRule(const UnicodeString
& name
, int32_t rawOffset
, int32_t dstSavings
,
401 const DateTimeRule
& dateTimeRule
, int32_t startYear
, int32_t endYear
);
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.
419 AnnualTimeZoneRule(const UnicodeString
& name
, int32_t rawOffset
, int32_t dstSavings
,
420 DateTimeRule
* dateTimeRule
, int32_t startYear
, int32_t endYear
);
424 * @param source The AnnualTimeZoneRule object to be copied.
427 AnnualTimeZoneRule(const AnnualTimeZoneRule
& source
);
433 virtual ~AnnualTimeZoneRule();
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.
441 virtual AnnualTimeZoneRule
* clone(void) const;
444 * Assignment operator.
445 * @param right The object to be copied.
448 AnnualTimeZoneRule
& operator=(const AnnualTimeZoneRule
& right
);
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.
457 virtual UBool
operator==(const TimeZoneRule
& that
) const;
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.
466 virtual UBool
operator!=(const TimeZoneRule
& that
) const;
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.
474 const DateTimeRule
* getRule(void) const;
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.
482 int32_t getStartYear(void) const;
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.
490 int32_t getEndYear(void) const;
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
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
504 UBool
getStartInYear(int32_t year
, int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
514 virtual UBool
isEquivalentTo(const TimeZoneRule
& that
) const;
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
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.
527 virtual UBool
getFirstStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
540 virtual UBool
getFinalStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
556 virtual UBool
getNextStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
557 UBool inclusive
, UDate
& result
) const;
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
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.
573 virtual UBool
getPreviousStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
574 UBool inclusive
, UDate
& result
) const;
578 DateTimeRule
* fDateTimeRule
;
584 * Return the class ID for this class. This is useful only for comparing to
585 * a return value from getDynamicClassID(). For example:
587 * . Base* polymorphic_pointer = createPolymorphicObject();
588 * . if (polymorphic_pointer->getDynamicClassID() ==
589 * . erived::getStaticClassID()) ...
591 * @return The class ID for all objects of this class.
594 static UClassID U_EXPORT2
getStaticClassID(void);
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.
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.
607 virtual UClassID
getDynamicClassID(void) const;
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.
616 class U_I18N_API TimeArrayTimeZoneRule
: public TimeZoneRule
{
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>.
635 TimeArrayTimeZoneRule(const UnicodeString
& name
, int32_t rawOffset
, int32_t dstSavings
,
636 const UDate
* startTimes
, int32_t numStartTimes
, DateTimeRule::TimeRuleType timeRuleType
);
640 * @param source The TimeArrayTimeZoneRule object to be copied.
643 TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule
& source
);
649 virtual ~TimeArrayTimeZoneRule();
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.
657 virtual TimeArrayTimeZoneRule
* clone(void) const;
660 * Assignment operator.
661 * @param right The object to be copied.
664 TimeArrayTimeZoneRule
& operator=(const TimeArrayTimeZoneRule
& right
);
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.
673 virtual UBool
operator==(const TimeZoneRule
& that
) const;
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.
682 virtual UBool
operator!=(const TimeZoneRule
& that
) const;
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>.
689 * @return The time type used of the start times used by this rule.
692 DateTimeRule::TimeRuleType
getTimeType(void) const;
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.
703 UBool
getStartTimeAt(int32_t index
, UDate
& result
) const;
706 * Returns the number of start times stored in this rule
707 * @return The number of start times.
710 int32_t countStartTimes(void) const;
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
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.
720 virtual UBool
isEquivalentTo(const TimeZoneRule
& that
) const;
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
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.
733 virtual UBool
getFirstStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
746 virtual UBool
getFinalStart(int32_t prevRawOffset
, int32_t prevDSTSavings
, UDate
& result
) const;
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
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.
762 virtual UBool
getNextStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
763 UBool inclusive
, UDate
& result
) const;
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
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.
779 virtual UBool
getPreviousStart(UDate base
, int32_t prevRawOffset
, int32_t prevDSTSavings
,
780 UBool inclusive
, UDate
& result
) const;
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;
788 DateTimeRule::TimeRuleType fTimeRuleType
;
789 int32_t fNumStartTimes
;
791 UDate fLocalStartTimes
[TIMEARRAY_STACK_BUFFER_SIZE
];
795 * Return the class ID for this class. This is useful only for comparing to
796 * a return value from getDynamicClassID(). For example:
798 * . Base* polymorphic_pointer = createPolymorphicObject();
799 * . if (polymorphic_pointer->getDynamicClassID() ==
800 * . erived::getStaticClassID()) ...
802 * @return The class ID for all objects of this class.
805 static UClassID U_EXPORT2
getStaticClassID(void);
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.
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.
818 virtual UClassID
getDynamicClassID(void) const;
824 #endif /* #if !UCONFIG_NO_FORMATTING */