00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef SIMPLETZ_H
00024
#define SIMPLETZ_H
00025
00026
#include "unicode/utypes.h"
00027
00028
#if !UCONFIG_NO_FORMATTING
00029
00030
#include "unicode/timezone.h"
00031
00032
U_NAMESPACE_BEGIN
00033
00050 class U_I18N_API SimpleTimeZone:
public TimeZone {
00051
public:
00052
00064
enum TimeMode {
00065 WALL_TIME = 0,
00066 STANDARD_TIME,
00067 UTC_TIME
00068 };
00069
00075 SimpleTimeZone(
const SimpleTimeZone& source);
00076
00082 SimpleTimeZone& operator=(
const SimpleTimeZone& right);
00083
00088
virtual ~SimpleTimeZone();
00089
00099
virtual UBool operator==(
const TimeZone& that)
const;
00100
00112 SimpleTimeZone(int32_t rawOffsetGMT,
const UnicodeString& ID);
00113
00149 SimpleTimeZone(int32_t rawOffsetGMT,
const UnicodeString& ID,
00150 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00151 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00152 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00153 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
00154 UErrorCode& status);
00192 SimpleTimeZone(int32_t rawOffsetGMT,
const UnicodeString& ID,
00193 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00194 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00195 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00196 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
00197 int32_t savingsDST, UErrorCode& status);
00198
00240 SimpleTimeZone(int32_t rawOffsetGMT,
const UnicodeString& ID,
00241 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00242 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00243 TimeMode savingsStartTimeMode,
00244 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00245 int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
00246 int32_t savingsDST, UErrorCode& status);
00247
00256
void setStartYear(int32_t year);
00257
00300
void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00301 int32_t time, UErrorCode& status);
00346
void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00347 int32_t time, TimeMode mode, UErrorCode& status);
00348
00360
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
00361 UErrorCode& status);
00375
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
00376 TimeMode mode, UErrorCode& status);
00377
00394
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00395 int32_t time, UBool after, UErrorCode& status);
00414
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00415 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
00416
00439
void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00440 int32_t time, UErrorCode& status);
00441
00466
void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00467 int32_t time, TimeMode mode, UErrorCode& status);
00468
00480
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
00481
00495
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
00496 TimeMode mode, UErrorCode& status);
00497
00514
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00515 int32_t time, UBool after, UErrorCode& status);
00516
00535
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00536 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
00537
00558
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00559 uint8_t dayOfWeek, int32_t millis, UErrorCode& status)
const;
00560
00576
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00577 uint8_t dayOfWeek, int32_t milliseconds,
00578 int32_t monthLength, UErrorCode& status)
const;
00595
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00596 uint8_t dayOfWeek, int32_t milliseconds,
00597 int32_t monthLength, int32_t prevMonthLength,
00598 UErrorCode& status)
const;
00599
00605
virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00606 int32_t& dstOffset, UErrorCode& ec)
const;
00607
00615
virtual int32_t getRawOffset(
void) const;
00616
00624 virtual
void setRawOffset(int32_t offsetMillis);
00625
00634
void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
00635
00643 int32_t getDSTSavings(
void) const;
00644
00651 virtual UBool useDaylightTime(
void) const;
00652
00667 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00668
00675 UBool hasSameRules(const
TimeZone& other) const;
00676
00684 virtual
TimeZone* clone(
void) const;
00685
00686 public:
00687
00698 virtual UClassID getDynamicClassID(
void) const;
00699
00711 static UClassID getStaticClassID(
void);
00712
00713 private:
00717 enum EMode
00718 {
00719 DOM_MODE = 1,
00720 DOW_IN_MONTH_MODE,
00721 DOW_GE_DOM_MODE,
00722 DOW_LE_DOM_MODE
00723 };
00724
00725 SimpleTimeZone();
00726
00746
void construct(int32_t rawOffsetGMT,
00747 int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
00748 int32_t startTime, TimeMode startTimeMode,
00749 int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
00750 int32_t endTime, TimeMode endTimeMode,
00751 int32_t dstSavings, UErrorCode& status);
00752
00762
static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
00763 int8_t dayOfMonth,
00764 int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
00765 EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
00766 int8_t ruleDay, int32_t ruleMillis);
00767
00783
void decodeRules(UErrorCode& status);
00784
void decodeStartRule(UErrorCode& status);
00785
void decodeEndRule(UErrorCode& status);
00786
00787
int8_t startMonth, startDay, startDayOfWeek;
00788
int32_t startTime;
00789 TimeMode startTimeMode, endTimeMode;
00790
int8_t endMonth, endDay, endDayOfWeek;
00791
int32_t endTime;
00792
int32_t startYear;
00793
int32_t rawOffset;
00794
UBool useDaylight;
00795
static const int8_t STATICMONTHLENGTH[12];
00796 EMode startMode, endMode;
00797
00802
int32_t dstSavings;
00803 };
00804
00805
inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
00806 int32_t dayOfWeek,
00807 int32_t time, UErrorCode& status) {
00808
setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
00809 }
00810
00811
inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
00812 int32_t time,
00813 UErrorCode& status) {
00814
setStartRule(month, dayOfMonth, time, WALL_TIME, status);
00815 }
00816
00817
inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
00818 int32_t dayOfWeek,
00819 int32_t time, UBool after, UErrorCode& status) {
00820
setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
00821 }
00822
00823
inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
00824 int32_t dayOfWeek,
00825 int32_t time, UErrorCode& status) {
00826
setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
00827 }
00828
00829
inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
00830 int32_t time, UErrorCode& status) {
00831
setEndRule(month, dayOfMonth, time, WALL_TIME, status);
00832 }
00833
00834
inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00835 int32_t time, UBool after, UErrorCode& status) {
00836
setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
00837 }
00838
00839
inline void
00840
SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
00841 int32_t& dstOffsetRef, UErrorCode& ec)
const {
00842 TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
00843 }
00844
00845
U_NAMESPACE_END
00846
00847
#endif
00848
00849
#endif // _SIMPLETZ