ICU 54.1 54.1

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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
38 U_NAMESPACE_BEGIN
39
40 // forward declaration
41 class InitialTimeZoneRule;
42 class TimeZoneTransition;
43 class AnnualTimeZoneRule;
44
61 class U_I18N_API SimpleTimeZone: public BasicTimeZone {
62 public:
63
75 enum TimeMode {
76 WALL_TIME = 0,
77 STANDARD_TIME,
78 UTC_TIME
79 };
80
86 SimpleTimeZone(const SimpleTimeZone& source);
87
93 SimpleTimeZone& operator=(const SimpleTimeZone& right);
94
99 virtual ~SimpleTimeZone();
100
110 virtual UBool operator==(const TimeZone& that) const;
111
123 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
124
160 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
161 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
162 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
163 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
164 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
165 UErrorCode& status);
203 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
204 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
205 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
206 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
207 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
208 int32_t savingsDST, UErrorCode& status);
209
251 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
252 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
253 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
254 TimeMode savingsStartTimeMode,
255 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
256 int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
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,
372 UErrorCode& status);
386 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
387 TimeMode mode, UErrorCode& status);
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,
507 TimeMode mode, UErrorCode& status);
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
623 virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
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
652 void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
653
661 virtual int32_t getDSTSavings(void) const;
662
669 virtual UBool useDaylightTime(void) const;
670
685 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
686
693 UBool hasSameRules(const TimeZone& other) const;
694
702 virtual TimeZone* clone(void) const;
703
712 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
713
722 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
723
732 virtual int32_t countTransitionRules(UErrorCode& status) const;
733
750 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
751 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
752
753
754 public:
755
766 virtual UClassID getDynamicClassID(void) const;
767
779 static UClassID U_EXPORT2 getStaticClassID(void);
780
781 private:
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
884 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
885 int32_t dayOfWeek,
886 int32_t time, UErrorCode& status) {
887 setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
888 }
889
890 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
891 int32_t time,
892 UErrorCode& status) {
893 setStartRule(month, dayOfMonth, time, WALL_TIME, status);
894 }
895
896 inline 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
902 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
903 int32_t dayOfWeek,
904 int32_t time, UErrorCode& status) {
905 setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
906 }
907
908 inline 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
913 inline 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
918 inline void
919 SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
920 int32_t& dstOffsetRef, UErrorCode& ec) const {
921 TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
922 }
923
924 U_NAMESPACE_END
925
926 #endif /* #if !UCONFIG_NO_FORMATTING */
927
928 #endif // _SIMPLETZ