Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

simpletz.h

00001 /* 00002 * Copyright (C) {1997-1999}, International Business Machines Corporation and others. All Rights Reserved. 00003 * * 00004 ******************************************************************************** 00005 * 00006 * File SIMPLETZ.H 00007 * 00008 * Modification History: 00009 * 00010 * Date Name Description 00011 * 04/21/97 aliu Overhauled header. 00012 * 08/10/98 stephen JDK 1.2 sync 00013 * Added setStartRule() / setEndRule() overloads 00014 * Added hasSameRules() 00015 * 09/02/98 stephen Added getOffset(monthLen) 00016 * Changed getOffset() to take UErrorCode 00017 * 07/09/99 stephen Removed millisPerHour (unused, for HP compiler) 00018 * 12/02/99 aliu Added TimeMode and constructor and setStart/EndRule 00019 * methods that take TimeMode. Added to docs. 00020 ******************************************************************************** 00021 */ 00022 00023 #ifndef SIMPLETZ_H 00024 #define SIMPLETZ_H 00025 00026 #include "unicode/timezone.h" 00027 00028 struct StandardZone; 00029 struct DSTZone; 00030 00031 U_NAMESPACE_BEGIN 00032 00033 class TimeZone; 00034 00051 class U_I18N_API SimpleTimeZone: public TimeZone { 00052 public: 00053 00064 enum TimeMode { 00065 WALL_TIME = 0, 00066 STANDARD_TIME, 00067 UTC_TIME 00068 }; 00069 00074 SimpleTimeZone(const SimpleTimeZone& source); 00075 00080 SimpleTimeZone& operator=(const SimpleTimeZone& right); 00081 00086 virtual ~SimpleTimeZone(); 00087 00097 virtual UBool operator==(const TimeZone& that) const; 00098 00110 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID); 00111 00153 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID, 00154 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, 00155 int8_t savingsStartDayOfWeek, int32_t savingsStartTime, 00156 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, 00157 int8_t savingsEndDayOfWeek, int32_t savingsEndTime, 00158 UErrorCode& status); 00159 00160 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID, 00161 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, 00162 int8_t savingsStartDayOfWeek, int32_t savingsStartTime, 00163 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, 00164 int8_t savingsEndDayOfWeek, int32_t savingsEndTime, 00165 int32_t savingsDST, UErrorCode& status); 00166 00167 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID, 00168 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, 00169 int8_t savingsStartDayOfWeek, int32_t savingsStartTime, 00170 TimeMode savingsStartTimeMode, 00171 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, 00172 int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode, 00173 int32_t savingsDST, UErrorCode& status); 00174 00183 void setStartYear(int32_t year); 00184 00227 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, 00228 int32_t time, UErrorCode& status); 00229 00230 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, 00231 int32_t time, TimeMode mode, UErrorCode& status); 00232 00246 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time, 00247 UErrorCode& status); 00248 00249 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time, 00250 TimeMode mode, UErrorCode& status); 00251 00270 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, 00271 int32_t time, UBool after, UErrorCode& status); 00272 00273 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, 00274 int32_t time, TimeMode mode, UBool after, UErrorCode& status); 00275 00300 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, 00301 int32_t time, UErrorCode& status); 00302 00303 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, 00304 int32_t time, TimeMode mode, UErrorCode& status); 00305 00319 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status); 00320 00321 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, 00322 TimeMode mode, UErrorCode& status); 00323 00342 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, 00343 int32_t time, UBool after, UErrorCode& status); 00344 00345 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, 00346 int32_t time, TimeMode mode, UBool after, UErrorCode& status); 00347 00367 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, 00368 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const; 00369 00370 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, 00371 uint8_t dayOfWeek, int32_t millis) const; 00372 00388 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, 00389 uint8_t dayOfWeek, int32_t milliseconds, 00390 int32_t monthLength, UErrorCode& status) const; 00391 00392 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, 00393 uint8_t dayOfWeek, int32_t milliseconds, 00394 int32_t monthLength, int32_t prevMonthLength, 00395 UErrorCode& status) const; 00396 00404 virtual int32_t getRawOffset(void) const; 00405 00413 virtual void setRawOffset(int32_t offsetMillis); 00414 00422 void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status); 00423 00424 #ifdef ICU_SIMPLETIMEZONE_USE_DEPRECATES 00428 void setDSTSavings(int32_t millisSavedDuringDST); 00429 #endif 00430 00437 int32_t getDSTSavings(void) const; 00438 00445 virtual UBool useDaylightTime(void) const; 00446 00456 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const; 00457 00464 UBool hasSameRules(const TimeZone& other) const; 00465 00473 virtual TimeZone* clone(void) const; 00474 00475 public: 00476 00487 virtual UClassID getDynamicClassID(void) const { return (UClassID)&fgClassID; } 00488 00500 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } 00501 00502 private: 00506 enum EMode 00507 { 00508 DOM_MODE = 1, 00509 DOW_IN_MONTH_MODE, 00510 DOW_GE_DOM_MODE, 00511 DOW_LE_DOM_MODE 00512 }; 00513 00514 friend class TimeZone; // for access to these 2 constructors: 00515 00519 SimpleTimeZone(const StandardZone& stdZone, const UnicodeString& id); 00520 SimpleTimeZone(const DSTZone& dstZone, const UnicodeString& id); 00521 00525 void construct(int32_t rawOffsetGMT, 00526 int8_t startMonth, int8_t startDay, int8_t startDayOfWeek, 00527 int32_t startTime, TimeMode startTimeMode, 00528 int8_t endMonth, int8_t endDay, int8_t endDayOfWeek, 00529 int32_t endTime, TimeMode endTimeMode, 00530 int32_t dstSavings, UErrorCode& status); 00531 00541 static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen, 00542 int8_t dayOfMonth, 00543 int8_t dayOfWeek, int32_t millis, int32_t millisDelta, 00544 EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek, 00545 int8_t ruleDay, int32_t ruleMillis); 00546 00562 void decodeRules(UErrorCode& status); 00563 void decodeStartRule(UErrorCode& status); 00564 void decodeEndRule(UErrorCode& status); 00565 00566 static const char fgClassID; 00567 00568 int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts 00569 int32_t startTime; 00570 TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode 00571 int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends 00572 int32_t endTime; 00573 int32_t startYear; // the year these DST rules took effect 00574 int32_t rawOffset; // the TimeZone's raw GMT offset 00575 UBool useDaylight; // flag indicating whether this TimeZone uses DST 00576 static const int8_t staticMonthLength[12]; // lengths of the months 00577 EMode startMode, endMode; // flags indicating what kind of rules the DST rules are 00578 00583 int32_t dstSavings; 00584 }; 00585 00586 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth, 00587 int32_t dayOfWeek, 00588 int32_t time, UErrorCode& status) { 00589 setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status); 00590 } 00591 00592 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, 00593 int32_t time, 00594 UErrorCode& status) { 00595 setStartRule(month, dayOfMonth, time, WALL_TIME, status); 00596 } 00597 00598 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, 00599 int32_t dayOfWeek, 00600 int32_t time, UBool after, UErrorCode& status) { 00601 setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status); 00602 } 00603 00604 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth, 00605 int32_t dayOfWeek, 00606 int32_t time, UErrorCode& status) { 00607 setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status); 00608 } 00609 00610 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, 00611 int32_t time, UErrorCode& status) { 00612 setEndRule(month, dayOfMonth, time, WALL_TIME, status); 00613 } 00614 00615 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, 00616 int32_t time, UBool after, UErrorCode& status) { 00617 setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status); 00618 } 00619 00620 U_NAMESPACE_END 00621 00622 #endif // _SIMPLETZ

Generated on Fri Aug 13 09:53:50 2004 for ICU 2.1 by doxygen 1.3.7