public class RuleBasedTimeZone extends BasicTimeZone
RuleBasedTimeZone
is a concrete subclass of TimeZone
that allows users to define
custom historic time transition rules.TimeZoneRule
,
Serialized FormBasicTimeZone.LocalOption
TimeZone.SystemTimeZoneType
FORMER_LATTER_MASK, LOCAL_DST, LOCAL_FORMER, LOCAL_LATTER, LOCAL_STD, STD_DST_MASK
GENERIC_LOCATION, GMT_ZONE, LONG, LONG_GENERIC, LONG_GMT, SHORT, SHORT_COMMONLY_USED, SHORT_GENERIC, SHORT_GMT, TIMEZONE_ICU, TIMEZONE_JDK, UNKNOWN_ZONE, UNKNOWN_ZONE_ID
Constructor and Description |
---|
RuleBasedTimeZone(String id,
InitialTimeZoneRule initialRule)
Constructs a
RuleBasedTimeZone object with the ID and the
InitialTimeZoneRule |
Modifier and Type | Method and Description |
---|---|
void |
addTransitionRule(TimeZoneRule rule)
Adds the
TimeZoneRule which represents time transitions. |
Object |
clone()
Overrides clone.
|
TimeZone |
cloneAsThawed()
Provides for the clone operation.
|
TimeZone |
freeze()
Freezes the object.
|
TimeZoneTransition |
getNextTransition(long base,
boolean inclusive)
[icu] Returns the first time zone transition after the base time
|
int |
getOffset(int era,
int year,
int month,
int day,
int dayOfWeek,
int milliseconds)
Gets the time zone offset, for current date, modified in case of
daylight savings.
|
void |
getOffset(long time,
boolean local,
int[] offsets)
Returns the time zone raw and GMT offset for the given moment
in time.
|
void |
getOffsetFromLocal(long date,
BasicTimeZone.LocalOption nonExistingTimeOpt,
BasicTimeZone.LocalOption duplicatedTimeOpt,
int[] offsets)
[icu] Returns time zone offsets from local wall time.
|
TimeZoneTransition |
getPreviousTransition(long base,
boolean inclusive)
[icu] Returns the last time zone transition before the base time
|
int |
getRawOffset()
Gets unmodified offset, NOT modified in case of daylight savings.
|
TimeZoneRule[] |
getTimeZoneRules()
[icu] Returns the array of
TimeZoneRule which represents the rule
of this time zone object. |
boolean |
hasSameRules(TimeZone other)
Returns true if this zone has the same rule and offset as another zone.
|
boolean |
inDaylightTime(Date date)
Queries if the given date is in daylight savings time in
this time zone.
|
boolean |
isFrozen()
Determines whether the object has been frozen or not.
|
boolean |
observesDaylightTime()
Queries if this time zone is in daylight saving time or will observe
daylight saving time at any future time.
|
void |
setRawOffset(int offsetMillis)
Sets the base time zone offset to GMT.
|
boolean |
useDaylightTime()
Queries if this time zone uses daylight savings time.
|
getLocalOptionValue, getSimpleTimeZoneRulesNear, getTimeZoneRules, hasEquivalentTransitions, hasEquivalentTransitions
countEquivalentIDs, equals, forLocaleOrDefault, forULocaleOrDefault, getAvailableIDs, getAvailableIDs, getAvailableIDs, getAvailableIDs, getCanonicalID, getCanonicalID, getDefault, getDefaultTimeZoneType, getDisplayName, getDisplayName, getDisplayName, getDisplayName, getDisplayName, getDisplayName, getDSTSavings, getEquivalentID, getFrozenTimeZone, getIanaID, getID, getIDForWindowsID, getOffset, getRegion, getTimeZone, getTimeZone, getTZDataVersion, getWindowsID, hashCode, setDefault, setDefaultTimeZoneType, setICUDefault, setID
public RuleBasedTimeZone(String id, InitialTimeZoneRule initialRule)
RuleBasedTimeZone
object with the ID and the
InitialTimeZoneRule
id
- The time zone ID.initialRule
- The initial time zone rule.public void addTransitionRule(TimeZoneRule rule)
TimeZoneRule
which represents time transitions.
The TimeZoneRule
must have start times, that is, the result
of TimeZoneRule.isTransitionRule()
must be true.
Otherwise, IllegalArgumentException
is thrown.rule
- The TimeZoneRule
.public int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds)
getOffset
in class TimeZone
era
- the era of the given date.year
- the year in the given date.month
- the month in the given date.
Month is 0-based. e.g., 0 for January.day
- the day-in-month of the given date.dayOfWeek
- the day-of-week of the given date.milliseconds
- the millis in day in standard local time.public void getOffset(long time, boolean local, int[] offsets)
getOffset
in class TimeZone
time
- moment in time for which to return offsets, in
units of milliseconds from January 1, 1970 0:00 GMT, either GMT
time or local wall time, depending on local
.local
- if true, date
is local wall time; otherwise it
is in GMT time.offsets
- output parameter to receive the raw offset, that
is, the offset not including DST adjustments, in offsets[0],
and the DST offset, that is, the offset to be added to
rawOffset
to obtain the total offset between local and GMT
time, in offsets[1]. If DST is not in effect, the DST offset is
zero; otherwise it is a positive value, typically one hour.public void getOffsetFromLocal(long date, BasicTimeZone.LocalOption nonExistingTimeOpt, BasicTimeZone.LocalOption duplicatedTimeOpt, int[] offsets)
getOffsetFromLocal
in class BasicTimeZone
public int getRawOffset()
getRawOffset
in class TimeZone
public boolean inDaylightTime(Date date)
inDaylightTime
in class TimeZone
date
- the given Date.public void setRawOffset(int offsetMillis)
setRawOffset
in class TimeZone
offsetMillis
- the given base time zone offset to GMT.public boolean useDaylightTime()
useDaylightTime
in class TimeZone
Note:The default implementation of
ICU TimeZone uses the tz database, which supports historic
rule changes, for system time zones. With the implementation,
there are time zones that used daylight savings time in the
past, but no longer used currently. For example, Asia/Tokyo has
never used daylight savings time since 1951. Most clients would
expect that this method to return false
for such case.
The default implementation of this method returns true
when the time zone uses daylight savings time in the current
(Gregorian) calendar year.
public boolean observesDaylightTime()
The default implementation in this class returns true
if TimeZone.useDaylightTime()
or inDaylightTime(new Date())
returns true
.
Note: This method was added for TimeZone
compatibility
support. The TimeZone.useDaylightTime()
method only checks the last known
rule(s), therefore it may return false even the zone observes daylight saving time currently.