ICU 57.1 57.1
simpletz.h
Go to the documentation of this file.
1/*
2 ********************************************************************************
3 * Copyright (C) 1997-2013, International Business Machines *
4 * Corporation and others. All Rights Reserved. *
5 ********************************************************************************
6 *
7 * File SIMPLETZ.H
8 *
9 * Modification History:
10 *
11 * Date Name Description
12 * 04/21/97 aliu Overhauled header.
13 * 08/10/98 stephen JDK 1.2 sync
14 * Added setStartRule() / setEndRule() overloads
15 * Added hasSameRules()
16 * 09/02/98 stephen Added getOffset(monthLen)
17 * Changed getOffset() to take UErrorCode
18 * 07/09/99 stephen Removed millisPerHour (unused, for HP compiler)
19 * 12/02/99 aliu Added TimeMode and constructor and setStart/EndRule
20 * methods that take TimeMode. Added to docs.
21 ********************************************************************************
22 */
23
24#ifndef SIMPLETZ_H
25#define SIMPLETZ_H
26
27#include "unicode/utypes.h"
28
34#if !UCONFIG_NO_FORMATTING
35
36#include "unicode/basictz.h"
37
39
40// forward declaration
44
62public:
63
75 enum TimeMode {
76 WALL_TIME = 0,
77 STANDARD_TIME,
78 UTC_TIME
79 };
80
87
94
99 virtual ~SimpleTimeZone();
100
110 virtual UBool operator==(const TimeZone& that) const;
111
124
164 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
207 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
208 int32_t savingsDST, UErrorCode& status);
209
257 int32_t savingsDST, UErrorCode& status);
258
267 void setStartYear(int32_t year);
268
311 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
312 int32_t time, UErrorCode& status);
357 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
358 int32_t time, TimeMode mode, UErrorCode& status);
359
371 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
386 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
388
405 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
406 int32_t time, UBool after, UErrorCode& status);
425 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
426 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
427
450 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
451 int32_t time, UErrorCode& status);
452
477 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
478 int32_t time, TimeMode mode, UErrorCode& status);
479
491 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
492
506 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
508
525 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
526 int32_t time, UBool after, UErrorCode& status);
527
546 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
547 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
548
569 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
570 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
571
587 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
588 uint8_t dayOfWeek, int32_t milliseconds,
589 int32_t monthLength, UErrorCode& status) const;
606 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
607 uint8_t dayOfWeek, int32_t milliseconds,
608 int32_t monthLength, int32_t prevMonthLength,
609 UErrorCode& status) const;
610
616 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
617 int32_t& dstOffset, UErrorCode& ec) const;
618
624 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
625
633 virtual int32_t getRawOffset(void) const;
634
642 virtual void setRawOffset(int32_t offsetMillis);
643
653
661 virtual int32_t getDSTSavings(void) const;
662
669 virtual UBool useDaylightTime(void) const;
670
686
694
702 virtual TimeZone* clone(void) const;
703
713
723
732 virtual int32_t countTransitionRules(UErrorCode& status) const;
733
751 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
752
753
754public:
755
766 virtual UClassID getDynamicClassID(void) const;
767
780
781private:
785 enum EMode
786 {
787 DOM_MODE = 1,
788 DOW_IN_MONTH_MODE,
789 DOW_GE_DOM_MODE,
790 DOW_LE_DOM_MODE
791 };
792
793 SimpleTimeZone(); // default constructor not implemented
794
814 void construct(int32_t rawOffsetGMT,
815 int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
816 int32_t startTime, TimeMode startTimeMode,
817 int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
818 int32_t endTime, TimeMode endTimeMode,
819 int32_t dstSavings, UErrorCode& status);
820
830 static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
831 int8_t dayOfMonth,
832 int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
833 EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
834 int8_t ruleDay, int32_t ruleMillis);
835
851 void decodeRules(UErrorCode& status);
852 void decodeStartRule(UErrorCode& status);
853 void decodeEndRule(UErrorCode& status);
854
855 int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts
856 int32_t startTime;
857 TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
858 int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
859 int32_t endTime;
860 int32_t startYear; // the year these DST rules took effect
861 int32_t rawOffset; // the TimeZone's raw GMT offset
862 UBool useDaylight; // flag indicating whether this TimeZone uses DST
863 static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
864 EMode startMode, endMode; // flags indicating what kind of rules the DST rules are
865
870 int32_t dstSavings;
871
872 /* Private for BasicTimeZone implementation */
873 void checkTransitionRules(UErrorCode& status) const;
874 void initTransitionRules(UErrorCode& status);
875 void clearTransitionRules(void);
876 void deleteTransitionRules(void);
877 UBool transitionRulesInitialized;
878 InitialTimeZoneRule* initialRule;
879 TimeZoneTransition* firstTransition;
880 AnnualTimeZoneRule* stdRule;
881 AnnualTimeZoneRule* dstRule;
882};
883
885 int32_t dayOfWeek,
886 int32_t time, UErrorCode& status) {
888}
889
890inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
891 int32_t time,
893 setStartRule(month, dayOfMonth, time, WALL_TIME, status);
894}
895
896inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
897 int32_t dayOfWeek,
898 int32_t time, UBool after, UErrorCode& status) {
899 setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
900}
901
903 int32_t dayOfWeek,
904 int32_t time, UErrorCode& status) {
906}
907
908inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
909 int32_t time, UErrorCode& status) {
910 setEndRule(month, dayOfMonth, time, WALL_TIME, status);
911}
912
913inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
914 int32_t time, UBool after, UErrorCode& status) {
915 setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
916}
917
918inline void
923
925
926#endif /* #if !UCONFIG_NO_FORMATTING */
927
928#endif // _SIMPLETZ
C++ API: ICU TimeZone base class.
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually.
Definition tzrule.h:376
BasicTimeZone is an abstract class extending TimeZone.
Definition basictz.h:34
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition tzrule.h:198
"Smart pointer" base class; do not use directly: use LocalPointer etc.
SimpleTimeZone is a concrete subclass of TimeZone that represents a time zone for use with a Gregoria...
Definition simpletz.h:61
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t milliseconds, int32_t monthLength, UErrorCode &status) const
Gets the time zone offset, for current date, modified in case of daylight savings.
void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode &status)
Sets the amount of time in ms that the clock is advanced during DST.
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID)
Constructs a SimpleTimeZone with the given raw GMT offset and time zone ID, and which doesn't observe...
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID, int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, int8_t savingsStartDayOfWeek, int32_t savingsStartTime, TimeMode savingsStartTimeMode, int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode, int32_t savingsDST, UErrorCode &status)
Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, and times to start and end da...
SimpleTimeZone & operator=(const SimpleTimeZone &right)
Default assignment operator.
virtual TimeZone * clone(void) const
Clones TimeZone objects polymorphically.
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZone objects are equal; that is, they have the same ID,...
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UBool after, UErrorCode &status)
Sets the DST start rule to a weekday before or after a give date within a month, e....
void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UErrorCode &status)
Sets the daylight savings starting rule.
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID, int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, int8_t savingsStartDayOfWeek, int32_t savingsStartTime, int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, int8_t savingsEndDayOfWeek, int32_t savingsEndTime, UErrorCode &status)
Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, and times to start and end da...
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const
Returns true if the given date is within the period when daylight savings time is in effect; false ot...
static UClassID getStaticClassID(void)
Return the class ID for this class.
virtual UClassID getDynamicClassID(void) const
Override TimeZone Returns a unique class ID POLYMORPHICALLY.
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UBool after, UErrorCode &status)
Sets the DST end rule to a weekday before or after a give date within a month, e.g....
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &status) const
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const
Gets the most recent time zone transition before the base time.
UBool hasSameRules(const TimeZone &other) const
Return true if this zone has the same rules and offset as another zone.
SimpleTimeZone(const SimpleTimeZone &source)
Copy constructor.
virtual void setRawOffset(int32_t offsetMillis)
Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local time,...
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const
Gets the first time zone transition after the base time.
void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, UErrorCode &status)
Sets the daylight savings starting rule.
Definition simpletz.h:884
void setStartYear(int32_t year)
Sets the daylight savings starting year, that is, the year this time zone began observing its specifi...
virtual ~SimpleTimeZone()
Destructor.
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time, TimeMode mode, UErrorCode &status)
Sets the DST start rule to a fixed date within a month.
TimeMode
TimeMode is used, together with a millisecond offset after midnight, to specify a rule transition tim...
Definition simpletz.h:75
void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UErrorCode &status)
Sets the daylight savings ending rule.
virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, int32_t &rawOffset, int32_t &dstOffset, UErrorCode &status) const
Get time zone offsets from local wall time.
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID, int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, int8_t savingsStartDayOfWeek, int32_t savingsStartTime, int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, int8_t savingsEndDayOfWeek, int32_t savingsEndTime, int32_t savingsDST, UErrorCode &status)
Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, and times to start and end da...
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, TimeMode mode, UErrorCode &status)
Sets the DST end rule to a fixed date within a month.
virtual int32_t countTransitionRules(UErrorCode &status) const
Returns the number of TimeZoneRules which represents time transitions, for this time zone,...
virtual int32_t getRawOffset(void) const
Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local ti...
virtual void getTimeZoneRules(const InitialTimeZoneRule *&initial, const TimeZoneRule *trsrules[], int32_t &trscount, UErrorCode &status) const
Gets the InitialTimeZoneRule and the set of TimeZoneRule which represent time transitions for this ti...
void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, UErrorCode &status)
Sets the daylight savings ending rule.
Definition simpletz.h:902
virtual UBool useDaylightTime(void) const
Queries if this TimeZone uses Daylight Savings Time.
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t milliseconds, int32_t monthLength, int32_t prevMonthLength, UErrorCode &status) const
Gets the time zone offset, for current date, modified in case of daylight savings.
virtual int32_t getDSTSavings(void) const
Returns the amount of time in ms that the clock is advanced during DST.
TimeZoneRule is a class representing a rule for time zone.
Definition tzrule.h:32
TimeZoneTransition is a class representing a time zone transition.
Definition tztrans.h:31
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition timezone.h:129
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &status) const =0
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:294
int8_t UBool
The ICU boolean type.
Definition umachine.h:234
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition utypes.h:476
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:358
double UDate
Date and Time data type.
Definition utypes.h:201
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:130
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:129