ICU 58.2 58.2

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

- File List
- Globals

simpletz.h
Go to the documentation of this file.
1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 ********************************************************************************
5 * Copyright (C) 1997-2013, International Business Machines *
6 * Corporation and others. All Rights Reserved. *
7 ********************************************************************************
8 *
9 * File SIMPLETZ.H
10 *
11 * Modification History:
12 *
13 * Date Name Description
14 * 04/21/97 aliu Overhauled header.
15 * 08/10/98 stephen JDK 1.2 sync
16 * Added setStartRule() / setEndRule() overloads
17 * Added hasSameRules()
18 * 09/02/98 stephen Added getOffset(monthLen)
19 * Changed getOffset() to take UErrorCode
20 * 07/09/99 stephen Removed millisPerHour (unused, for HP compiler)
21 * 12/02/99 aliu Added TimeMode and constructor and setStart/EndRule
22 * methods that take TimeMode. Added to docs.
23 ********************************************************************************
24 */
25
26 #ifndef SIMPLETZ_H
27 #define SIMPLETZ_H
28
29 #include "unicode/utypes.h"
30
36 #if !UCONFIG_NO_FORMATTING
37
38 #include "unicode/basictz.h"
39
40 U_NAMESPACE_BEGIN
41
42 // forward declaration
43 class InitialTimeZoneRule;
44 class TimeZoneTransition;
45 class AnnualTimeZoneRule;
46
63 class U_I18N_API SimpleTimeZone: public BasicTimeZone {
64 public:
65
77 enum TimeMode {
78 WALL_TIME = 0,
79 STANDARD_TIME,
80 UTC_TIME
81 };
82
88 SimpleTimeZone(const SimpleTimeZone& source);
89
95 SimpleTimeZone& operator=(const SimpleTimeZone& right);
96
101 virtual ~SimpleTimeZone();
102
112 virtual UBool operator==(const TimeZone& that) const;
113
125 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
126
162 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
163 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
164 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
165 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
166 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
167 UErrorCode& status);
205 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
206 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
207 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
208 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
209 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
210 int32_t savingsDST, UErrorCode& status);
211
253 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
254 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
255 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
256 TimeMode savingsStartTimeMode,
257 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
258 int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
259 int32_t savingsDST, UErrorCode& status);
260
269 void setStartYear(int32_t year);
270
313 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
314 int32_t time, UErrorCode& status);
359 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
360 int32_t time, TimeMode mode, UErrorCode& status);
361
373 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
374 UErrorCode& status);
388 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
389 TimeMode mode, UErrorCode& status);
390
407 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
408 int32_t time, UBool after, UErrorCode& status);
427 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
428 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
429
452 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
453 int32_t time, UErrorCode& status);
454
479 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
480 int32_t time, TimeMode mode, UErrorCode& status);
481
493 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
494
508 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
509 TimeMode mode, UErrorCode& status);
510
527 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
528 int32_t time, UBool after, UErrorCode& status);
529
548 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
549 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
550
571 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
572 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
573
589 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
590 uint8_t dayOfWeek, int32_t milliseconds,
591 int32_t monthLength, UErrorCode& status) const;
608 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
609 uint8_t dayOfWeek, int32_t milliseconds,
610 int32_t monthLength, int32_t prevMonthLength,
611 UErrorCode& status) const;
612
618 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
619 int32_t& dstOffset, UErrorCode& ec) const;
620
625 virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
626 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
627
635 virtual int32_t getRawOffset(void) const;
636
644 virtual void setRawOffset(int32_t offsetMillis);
645
654 void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
655
663 virtual int32_t getDSTSavings(void) const;
664
671 virtual UBool useDaylightTime(void) const;
672
687 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
688
695 UBool hasSameRules(const TimeZone& other) const;
696
704 virtual TimeZone* clone(void) const;
705
714 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
715
724 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
725
734 virtual int32_t countTransitionRules(UErrorCode& status) const;
735
752 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
753 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
754
755
756 public:
757
768 virtual UClassID getDynamicClassID(void) const;
769
781 static UClassID U_EXPORT2 getStaticClassID(void);
782
783 private:
787 enum EMode
788 {
789 DOM_MODE = 1,
790 DOW_IN_MONTH_MODE,
791 DOW_GE_DOM_MODE,
792 DOW_LE_DOM_MODE
793 };
794
795 SimpleTimeZone(); // default constructor not implemented
796
816 void construct(int32_t rawOffsetGMT,
817 int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
818 int32_t startTime, TimeMode startTimeMode,
819 int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
820 int32_t endTime, TimeMode endTimeMode,
821 int32_t dstSavings, UErrorCode& status);
822
832 static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
833 int8_t dayOfMonth,
834 int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
835 EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
836 int8_t ruleDay, int32_t ruleMillis);
837
853 void decodeRules(UErrorCode& status);
854 void decodeStartRule(UErrorCode& status);
855 void decodeEndRule(UErrorCode& status);
856
857 int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts
858 int32_t startTime;
859 TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
860 int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
861 int32_t endTime;
862 int32_t startYear; // the year these DST rules took effect
863 int32_t rawOffset; // the TimeZone's raw GMT offset
864 UBool useDaylight; // flag indicating whether this TimeZone uses DST
865 static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
866 EMode startMode, endMode; // flags indicating what kind of rules the DST rules are
867
872 int32_t dstSavings;
873
874 /* Private for BasicTimeZone implementation */
875 void checkTransitionRules(UErrorCode& status) const;
876 void initTransitionRules(UErrorCode& status);
877 void clearTransitionRules(void);
878 void deleteTransitionRules(void);
879 UBool transitionRulesInitialized;
880 InitialTimeZoneRule* initialRule;
881 TimeZoneTransition* firstTransition;
882 AnnualTimeZoneRule* stdRule;
883 AnnualTimeZoneRule* dstRule;
884 };
885
886 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
887 int32_t dayOfWeek,
888 int32_t time, UErrorCode& status) {
889 setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
890 }
891
892 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
893 int32_t time,
894 UErrorCode& status) {
895 setStartRule(month, dayOfMonth, time, WALL_TIME, status);
896 }
897
898 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
899 int32_t dayOfWeek,
900 int32_t time, UBool after, UErrorCode& status) {
901 setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
902 }
903
904 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
905 int32_t dayOfWeek,
906 int32_t time, UErrorCode& status) {
907 setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
908 }
909
910 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
911 int32_t time, UErrorCode& status) {
912 setEndRule(month, dayOfMonth, time, WALL_TIME, status);
913 }
914
915 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
916 int32_t time, UBool after, UErrorCode& status) {
917 setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
918 }
919
920 inline void
921 SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
922 int32_t& dstOffsetRef, UErrorCode& ec) const {
923 TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
924 }
925
926 U_NAMESPACE_END
927
928 #endif /* #if !UCONFIG_NO_FORMATTING */
929
930 #endif // _SIMPLETZ
icu::TimeZone::useDaylightTime
virtual UBool useDaylightTime(void) const =0
Queries if this time zone uses daylight savings time.
icu::BasicTimeZone::getPreviousTransition
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the most recent time zone transition before the base time.
icu::TimeZone::getOffset
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&#39;s adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
icu::TimeZone::operator==
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
icu::TimeZone::operator=
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
icu::BasicTimeZone::getOffsetFromLocal
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.
UDate
double UDate
Date and Time data type.
Definition: utypes.h:203
icu::SimpleTimeZone::setStartRule
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:886
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler&#39;s RTTI.
Definition: uobject.h:93
icu::TimeZone::getStaticClassID
static UClassID getStaticClassID(void)
Return the class ID for this class.
icu::SimpleTimeZone::getOffset
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&#39;s adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
icu::TimeZone
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:131
basictz.h
C++ API: ICU TimeZone base class.
U_I18N_API
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:360
icu::TimeZoneRule
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:34
icu::InitialTimeZoneRule
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:200
icu::SimpleTimeZone::TimeMode
TimeMode
TimeMode is used, together with a millisecond offset after midnight, to specify a rule transition tim...
Definition: simpletz.h:77
U_NAMESPACE_BEGIN
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:131
icu::TimeZone::clone
virtual TimeZone * clone(void) const =0
Clones TimeZone objects polymorphically.
icu::TimeZone::hasSameRules
virtual UBool hasSameRules(const TimeZone &other) const
Returns true if this zone has the same rule and offset as another zone.
icu::TimeZone::getDSTSavings
virtual int32_t getDSTSavings() const
Returns the amount of time to be added to local standard time to get local wall clock time...
icu::TimeZoneTransition
TimeZoneTransition is a class representing a time zone transition.
Definition: tztrans.h:33
icu::TimeZone::getDynamicClassID
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
icu::BasicTimeZone
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:36
icu::AnnualTimeZoneRule
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually...
Definition: tzrule.h:378
icu::SimpleTimeZone
SimpleTimeZone is a concrete subclass of TimeZone that represents a time zone for use with a Gregoria...
Definition: simpletz.h:63
U_NAMESPACE_END
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:132
icu::SimpleTimeZone::setEndRule
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:904
icu::TimeZone::setRawOffset
virtual void setRawOffset(int32_t offsetMillis)=0
Sets the TimeZone&#39;s raw GMT offset (i.e., the number of milliseconds to add to GMT to get local time...
UErrorCode
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:396
icu::BasicTimeZone::getTimeZoneRules
virtual void getTimeZoneRules(const InitialTimeZoneRule *&initial, const TimeZoneRule *trsrules[], int32_t &trscount, UErrorCode &status) const =0
Gets the InitialTimeZoneRule and the set of TimeZoneRule which represent time transitions for this ti...
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:295
icu::BasicTimeZone::getNextTransition
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the first time zone transition after the base time.
icu::BasicTimeZone::countTransitionRules
virtual int32_t countTransitionRules(UErrorCode &status) const =0
Returns the number of TimeZoneRules which represents time transitions, for this time zone...
icu::TimeZone::getRawOffset
virtual int32_t getRawOffset(void) const =0
Returns the TimeZone&#39;s raw GMT offset (i.e., the number of milliseconds to add to GMT to get local ti...
icu::TimeZone::inDaylightTime
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const =0
Queries if the given date is in daylight savings time in this time zone.
UBool
int8_t UBool
The ICU boolean type.
Definition: umachine.h:259