public class DateTimeZoneBuilder
extends java.lang.Object
DateTimeZoneBuilder itself is mutable and not thread-safe, but the DateTimeZone objects that it builds are thread-safe and immutable.
It is intended that ZoneInfoCompiler
be used to read time zone data
files, indirectly calling DateTimeZoneBuilder. The following complex
example defines the America/Los_Angeles time zone, with all historical
transitions:
DateTimeZone America_Los_Angeles = new DateTimeZoneBuilder() .addCutover(-2147483648, 'w', 1, 1, 0, false, 0) .setStandardOffset(-28378000) .setFixedSavings("LMT", 0) .addCutover(1883, 'w', 11, 18, 0, false, 43200000) .setStandardOffset(-28800000) .addRecurringSavings("PDT", 3600000, 1918, 1919, 'w', 3, -1, 7, false, 7200000) .addRecurringSavings("PST", 0, 1918, 1919, 'w', 10, -1, 7, false, 7200000) .addRecurringSavings("PWT", 3600000, 1942, 1942, 'w', 2, 9, 0, false, 7200000) .addRecurringSavings("PPT", 3600000, 1945, 1945, 'u', 8, 14, 0, false, 82800000) .addRecurringSavings("PST", 0, 1945, 1945, 'w', 9, 30, 0, false, 7200000) .addRecurringSavings("PDT", 3600000, 1948, 1948, 'w', 3, 14, 0, false, 7200000) .addRecurringSavings("PST", 0, 1949, 1949, 'w', 1, 1, 0, false, 7200000) .addRecurringSavings("PDT", 3600000, 1950, 1966, 'w', 4, -1, 7, false, 7200000) .addRecurringSavings("PST", 0, 1950, 1961, 'w', 9, -1, 7, false, 7200000) .addRecurringSavings("PST", 0, 1962, 1966, 'w', 10, -1, 7, false, 7200000) .addRecurringSavings("PST", 0, 1967, 2147483647, 'w', 10, -1, 7, false, 7200000) .addRecurringSavings("PDT", 3600000, 1967, 1973, 'w', 4, -1, 7, false, 7200000) .addRecurringSavings("PDT", 3600000, 1974, 1974, 'w', 1, 6, 0, false, 7200000) .addRecurringSavings("PDT", 3600000, 1975, 1975, 'w', 2, 23, 0, false, 7200000) .addRecurringSavings("PDT", 3600000, 1976, 1986, 'w', 4, -1, 7, false, 7200000) .addRecurringSavings("PDT", 3600000, 1987, 2147483647, 'w', 4, 1, 7, true, 7200000) .toDateTimeZone("America/Los_Angeles", true);
ZoneInfoCompiler
,
ZoneInfoProvider
Modifier and Type | Class and Description |
---|---|
private static class |
DateTimeZoneBuilder.DSTZone |
private static class |
DateTimeZoneBuilder.OfYear
Supports setting fields of year and moving between transitions.
|
private static class |
DateTimeZoneBuilder.PrecalculatedZone |
private static class |
DateTimeZoneBuilder.Recurrence
Extends OfYear with a nameKey and savings.
|
private static class |
DateTimeZoneBuilder.Rule
Extends Recurrence with inclusive year limits.
|
private static class |
DateTimeZoneBuilder.RuleSet |
private static class |
DateTimeZoneBuilder.Transition |
Modifier and Type | Field and Description |
---|---|
private java.util.ArrayList<DateTimeZoneBuilder.RuleSet> |
iRuleSets |
Constructor and Description |
---|
DateTimeZoneBuilder() |
Modifier and Type | Method and Description |
---|---|
DateTimeZoneBuilder |
addCutover(int year,
char mode,
int monthOfYear,
int dayOfMonth,
int dayOfWeek,
boolean advanceDayOfWeek,
int millisOfDay)
Adds a cutover for added rules.
|
DateTimeZoneBuilder |
addRecurringSavings(java.lang.String nameKey,
int saveMillis,
int fromYear,
int toYear,
char mode,
int monthOfYear,
int dayOfMonth,
int dayOfWeek,
boolean advanceDayOfWeek,
int millisOfDay)
Add a recurring daylight saving time rule.
|
private boolean |
addTransition(java.util.ArrayList<DateTimeZoneBuilder.Transition> transitions,
DateTimeZoneBuilder.Transition tr) |
private static DateTimeZone |
buildFixedZone(java.lang.String id,
java.lang.String nameKey,
int wallOffset,
int standardOffset) |
private DateTimeZoneBuilder.RuleSet |
getLastRuleSet() |
static DateTimeZone |
readFrom(java.io.DataInput in,
java.lang.String id)
Decodes a built DateTimeZone from the given stream, as encoded by
writeTo.
|
static DateTimeZone |
readFrom(java.io.InputStream in,
java.lang.String id)
Decodes a built DateTimeZone from the given stream, as encoded by
writeTo.
|
(package private) static long |
readMillis(java.io.DataInput in)
Reads encoding generated by writeMillis.
|
DateTimeZoneBuilder |
setFixedSavings(java.lang.String nameKey,
int saveMillis)
Set a fixed savings rule at the cutover.
|
DateTimeZoneBuilder |
setStandardOffset(int standardOffset)
Sets the standard offset to use for newly added rules until the next
cutover is added.
|
DateTimeZone |
toDateTimeZone(java.lang.String id,
boolean outputID)
Processes all the rules and builds a DateTimeZone.
|
(package private) static void |
writeMillis(java.io.DataOutput out,
long millis)
Millisecond encoding formats:
upper two bits units field length approximate range
---------------------------------------------------------------
00 30 minutes 1 byte +/- 16 hours
01 minutes 4 bytes +/- 1020 years
10 seconds 5 bytes +/- 4355 years
11 millis 9 bytes +/- 292,000,000 years
Remaining bits in field form signed offset from 1970-01-01T00:00:00Z.
|
void |
writeTo(java.lang.String zoneID,
java.io.DataOutput out)
Encodes a built DateTimeZone to the given stream.
|
void |
writeTo(java.lang.String zoneID,
java.io.OutputStream out)
Encodes a built DateTimeZone to the given stream.
|
private final java.util.ArrayList<DateTimeZoneBuilder.RuleSet> iRuleSets
public static DateTimeZone readFrom(java.io.InputStream in, java.lang.String id) throws java.io.IOException
in
- input stream to read encoded DateTimeZone from.id
- time zone id to assignjava.io.IOException
public static DateTimeZone readFrom(java.io.DataInput in, java.lang.String id) throws java.io.IOException
in
- input stream to read encoded DateTimeZone from.id
- time zone id to assignjava.io.IOException
static void writeMillis(java.io.DataOutput out, long millis) throws java.io.IOException
java.io.IOException
static long readMillis(java.io.DataInput in) throws java.io.IOException
java.io.IOException
private static DateTimeZone buildFixedZone(java.lang.String id, java.lang.String nameKey, int wallOffset, int standardOffset)
public DateTimeZoneBuilder addCutover(int year, char mode, int monthOfYear, int dayOfMonth, int dayOfWeek, boolean advanceDayOfWeek, int millisOfDay)
year
- the year of cutovermode
- 'u' - cutover is measured against UTC, 'w' - against wall
offset, 's' - against standard offsetmonthOfYear
- the month from 1 (January) to 12 (December)dayOfMonth
- if negative, set to ((last day of month) - ~dayOfMonth).
For example, if -1, set to last day of monthdayOfWeek
- from 1 (Monday) to 7 (Sunday), if 0 then ignoreadvanceDayOfWeek
- if dayOfMonth does not fall on dayOfWeek, advance to
dayOfWeek when true, retreat when false.millisOfDay
- additional precision for specifying time of day of cutoverpublic DateTimeZoneBuilder setStandardOffset(int standardOffset)
standardOffset
- the standard offset in millispublic DateTimeZoneBuilder setFixedSavings(java.lang.String nameKey, int saveMillis)
public DateTimeZoneBuilder addRecurringSavings(java.lang.String nameKey, int saveMillis, int fromYear, int toYear, char mode, int monthOfYear, int dayOfMonth, int dayOfWeek, boolean advanceDayOfWeek, int millisOfDay)
nameKey
- the name key of new rulesaveMillis
- the milliseconds to add to standard offsetfromYear
- the first year that rule is in effect, MIN_VALUE indicates
beginning of timetoYear
- the last year (inclusive) that rule is in effect, MAX_VALUE
indicates end of timemode
- 'u' - transitions are calculated against UTC, 'w' -
transitions are calculated against wall offset, 's' - transitions are
calculated against standard offsetmonthOfYear
- the month from 1 (January) to 12 (December)dayOfMonth
- if negative, set to ((last day of month) - ~dayOfMonth).
For example, if -1, set to last day of monthdayOfWeek
- from 1 (Monday) to 7 (Sunday), if 0 then ignoreadvanceDayOfWeek
- if dayOfMonth does not fall on dayOfWeek, advance to
dayOfWeek when true, retreat when false.millisOfDay
- additional precision for specifying time of day of transitionsprivate DateTimeZoneBuilder.RuleSet getLastRuleSet()
public DateTimeZone toDateTimeZone(java.lang.String id, boolean outputID)
id
- time zone id to assignoutputID
- true if the zone id should be outputprivate boolean addTransition(java.util.ArrayList<DateTimeZoneBuilder.Transition> transitions, DateTimeZoneBuilder.Transition tr)
public void writeTo(java.lang.String zoneID, java.io.OutputStream out) throws java.io.IOException
out
- the output stream to receive the encoded DateTimeZonejava.io.IOException
public void writeTo(java.lang.String zoneID, java.io.DataOutput out) throws java.io.IOException
out
- the output stream to receive the encoded DateTimeZonejava.io.IOException