diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/impl/unicode/CLDRHelper.java b/teavm-classlib/src/main/java/org/teavm/classlib/impl/unicode/CLDRHelper.java new file mode 100644 index 000000000..d50257933 --- /dev/null +++ b/teavm-classlib/src/main/java/org/teavm/classlib/impl/unicode/CLDRHelper.java @@ -0,0 +1,26 @@ +/* + * Copyright 2014 Alexey Andreev. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.teavm.classlib.impl.unicode; + +/** + * + * @author Alexey Andreev + */ +public class CLDRHelper { + public static String getCode(String language, String country) { + return !country.isEmpty() ? language + "-" + country : language; + } +} diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Calendar.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Calendar.java index 9ff267fed..da144726d 100644 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Calendar.java +++ b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Calendar.java @@ -32,6 +32,7 @@ package org.teavm.classlib.java.util; +import org.teavm.classlib.impl.unicode.CLDRHelper; import org.teavm.classlib.java.io.TSerializable; import org.teavm.classlib.java.lang.TCloneable; import org.teavm.classlib.java.lang.TComparable; @@ -57,8 +58,6 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable private int minimalDaysInFirstWeek; - private TimeZone zone; - public static final int JANUARY = 0; public static final int FEBRUARY = 1; @@ -147,24 +146,24 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable "MINUTE=", "SECOND=", "MILLISECOND=", "ZONE_OFFSET=", "DST_OFFSET=" }; protected Calendar() { - this(TimeZone.getDefault(), TLocale.getDefault()); + this(TLocale.getDefault()); } - Calendar(TimeZone timezone) { + protected Calendar(TLocale locale) { fields = new int[FIELD_COUNT]; isSet = new boolean[FIELD_COUNT]; areFieldsSet = isTimeSet = false; setLenient(true); - setTimeZone(timezone); + String localeCode = CLDRHelper.getCode(locale.getLanguage(), locale.getCountry()); + setFirstDayOfWeek(getFirstDayOfWeek(localeCode)); + setMinimalDaysInFirstWeek(getMinimalDaysInFirstWeek(localeCode)); } - protected Calendar(TimeZone timezone, TLocale locale) { - this(timezone); - com.ibm.icu.util.Calendar icuCalendar = com.ibm.icu.util.Calendar.getInstance( - com.ibm.icu.util.SimpleTimeZone.getTimeZone(timezone.getID()), locale); - setFirstDayOfWeek(icuCalendar.getFirstDayOfWeek()); - setMinimalDaysInFirstWeek(icuCalendar.getMinimalDaysInFirstWeek()); - } + // TODO: implement using CLDR + private static native int getFirstDayOfWeek(String localeCode); + + // TODO: implement using CLDR + private static native int getMinimalDaysInFirstWeek(String localeCode); abstract public void add(int field, int value); @@ -202,7 +201,6 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable Calendar clone = (Calendar) super.clone(); clone.fields = fields.clone(); clone.isSet = isSet.clone(); - clone.zone = (TimeZone) zone.clone(); return clone; } catch (CloneNotSupportedException e) { return null; @@ -235,8 +233,7 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable Calendar cal = (Calendar) object; return getTimeInMillis() == cal.getTimeInMillis() && isLenient() == cal.isLenient() && getFirstDayOfWeek() == cal.getFirstDayOfWeek() && - getMinimalDaysInFirstWeek() == cal.getMinimalDaysInFirstWeek() && - getTimeZone().equals(cal.getTimeZone()); + getMinimalDaysInFirstWeek() == cal.getMinimalDaysInFirstWeek(); } public int get(int field) { @@ -298,14 +295,6 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return new GregorianCalendar(locale); } - public static synchronized Calendar getInstance(TimeZone timezone) { - return new GregorianCalendar(timezone); - } - - public static synchronized Calendar getInstance(TimeZone timezone, TLocale locale) { - return new GregorianCalendar(timezone, locale); - } - abstract public int getLeastMaximum(int field); abstract public int getMaximum(int field); @@ -328,14 +317,9 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return time; } - public TimeZone getTimeZone() { - return zone; - } - @Override public int hashCode() { - return (isLenient() ? 1237 : 1231) + getFirstDayOfWeek() + getMinimalDaysInFirstWeek() + - getTimeZone().hashCode(); + return (isLenient() ? 1237 : 1231) + getFirstDayOfWeek() + getMinimalDaysInFirstWeek(); } protected final int internalGet(int field) { @@ -417,17 +401,11 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable } } - public void setTimeZone(TimeZone timezone) { - zone = timezone; - areFieldsSet = false; - } - @Override - @SuppressWarnings("nls") public String toString() { StringBuilder result = new StringBuilder(getClass().getName() + "[time=" + (isTimeSet ? String.valueOf(time) : "?") + ",areFieldsSet=" + areFieldsSet + ",lenient=" + lenient + - ",zone=" + zone + ",firstDayOfWeek=" + firstDayOfWeek + ",minimalDaysInFirstWeek=" + + ",firstDayOfWeek=" + firstDayOfWeek + ",minimalDaysInFirstWeek=" + minimalDaysInFirstWeek); for (int i = 0; i < FIELD_COUNT; i++) { result.append(','); diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Date.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Date.java index 6c074f2ad..aed8c7592 100644 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Date.java +++ b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/Date.java @@ -37,7 +37,6 @@ import org.teavm.classlib.java.lang.TCloneable; import org.teavm.classlib.java.lang.TComparable; import org.teavm.classlib.java.text.DateFormat; import org.teavm.classlib.java.text.DateFormatSymbols; -import org.teavm.classlib.java.text.SimpleDateFormat; public class Date implements TSerializable, TCloneable, TComparable { @@ -405,16 +404,12 @@ public class Date implements TSerializable, TCloneable, TComparable { @Deprecated public String toGMTString() { - SimpleDateFormat format1 = new SimpleDateFormat("d MMM ", TLocale.US); - SimpleDateFormat format2 = new SimpleDateFormat(" HH:mm:ss 'GMT'", TLocale.US); - TimeZone gmtZone = TimeZone.getTimeZone("GMT"); - format1.setTimeZone(gmtZone); - format2.setTimeZone(gmtZone); - GregorianCalendar gc = new GregorianCalendar(gmtZone); - gc.setTimeInMillis(milliseconds); - return format1.format(this) + gc.get(Calendar.YEAR) + format2.format(this); + return toGTMString((int)(milliseconds >> 32), (int)milliseconds); } + // TODO: implement using native JavaScript method + private static native String toGTMString(int hidate, int lodate); + @Deprecated public String toLocaleString() { return DateFormat.getDateTimeInstance().format(this); @@ -422,30 +417,12 @@ public class Date implements TSerializable, TCloneable, TComparable { @Override public String toString() { - Calendar cal = new GregorianCalendar(milliseconds); - TimeZone zone = cal.getTimeZone(); - String zoneName = zone.getDisplayName(zone.inDaylightTime(this), TimeZone.SHORT, TLocale.getDefault()); - - StringBuilder sb = new StringBuilder(34); - sb.append(dayOfWeekNames[cal.get(Calendar.DAY_OF_WEEK) - 1]); - sb.append(' '); - sb.append(monthNames[cal.get(Calendar.MONTH)]); - sb.append(' '); - sb.append(toTwoDigits(cal.get(Calendar.DAY_OF_MONTH))); - sb.append(' '); - sb.append(toTwoDigits(cal.get(Calendar.HOUR_OF_DAY))); - sb.append(':'); - sb.append(toTwoDigits(cal.get(Calendar.MINUTE))); - sb.append(':'); - sb.append(toTwoDigits(cal.get(Calendar.SECOND))); - sb.append(' '); - sb.append(zoneName); - sb.append(' '); - sb.append(cal.get(Calendar.YEAR)); - - return sb.toString(); + return toString((int)(milliseconds >> 32), (int)milliseconds); } + // TODO: implement using native JavaScript method + private static native String toString(int hidate, int lodate); + private String toTwoDigits(int digit) { if (digit >= 10) { return "" + digit; @@ -456,10 +433,8 @@ public class Date implements TSerializable, TCloneable, TComparable { @Deprecated public static long UTC(int year, int month, int day, int hour, int minute, int second) { - GregorianCalendar cal = new GregorianCalendar(false); - cal.setTimeZone(TimeZone.getTimeZone("GMT")); - cal.set(1900 + year, month, day, hour, minute, second); - return cal.getTimeInMillis(); + Date date = new Date(year, month, day, hour, minute, second); + return date.milliseconds - date.getTimezoneOffset(); } private static int zone(String text) { diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/GregorianCalendar.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/GregorianCalendar.java index 426a2406c..df990289c 100644 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/GregorianCalendar.java +++ b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/GregorianCalendar.java @@ -34,23 +34,19 @@ public class GregorianCalendar extends Calendar { private transient int changeYear = 1582; - private transient int julianSkew = ((changeYear - 2000) / 400) - + julianError() - ((changeYear - 2000) / 100); + private transient int julianSkew = ((changeYear - 2000) / 400) + julianError() - ((changeYear - 2000) / 100); - static byte[] DaysInMonth = new byte[] { 31, 28, 31, 30, 31, 30, 31, 31, - 30, 31, 30, 31 }; + static byte[] DaysInMonth = new byte[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - private static int[] DaysInYear = new int[] { 0, 31, 59, 90, 120, 151, 181, - 212, 243, 273, 304, 334 }; + private static int[] DaysInYear = new int[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; - private static int[] maximums = new int[] { 1, 292278994, 11, 53, 6, 31, - 366, 7, 6, 1, 11, 23, 59, 59, 999, 14 * 3600 * 1000, 7200000 }; + private static int[] maximums = new int[] { 1, 292278994, 11, 53, 6, 31, 366, 7, 6, 1, 11, 23, 59, 59, 999, + 14 * 3600 * 1000, 7200000 }; - private static int[] minimums = new int[] { 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, -13 * 3600 * 1000, 0 }; + private static int[] minimums = new int[] { 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, -13 * 3600 * 1000, 0 }; - private static int[] leastMaximums = new int[] { 1, 292269054, 11, 50, 3, - 28, 355, 7, 3, 1, 11, 23, 59, 59, 999, 50400000, 1200000 }; + private static int[] leastMaximums = new int[] { 1, 292269054, 11, 50, 3, 28, 355, 7, 3, 1, 11, 23, 59, 59, 999, + 50400000, 1200000 }; private boolean isCached; @@ -64,70 +60,19 @@ public class GregorianCalendar extends Calendar { private int lastYearSkew = 0; - /** - * Constructs a new {@code GregorianCalendar} initialized to the current date and - * time with the default {@code Locale} and {@code TimeZone}. - */ public GregorianCalendar() { - this(TimeZone.getDefault(), TLocale.getDefault()); + this(TLocale.getDefault()); } - /** - * Constructs a new {@code GregorianCalendar} initialized to midnight in the default - * {@code TimeZone} and {@code Locale} on the specified date. - * - * @param year - * the year. - * @param month - * the month. - * @param day - * the day of the month. - */ public GregorianCalendar(int year, int month, int day) { - super(TimeZone.getDefault(), TLocale.getDefault()); set(year, month, day); } - /** - * Constructs a new {@code GregorianCalendar} initialized to the specified date and - * time in the default {@code TimeZone} and {@code Locale}. - * - * @param year - * the year. - * @param month - * the month. - * @param day - * the day of the month. - * @param hour - * the hour. - * @param minute - * the minute. - */ public GregorianCalendar(int year, int month, int day, int hour, int minute) { - super(TimeZone.getDefault(), TLocale.getDefault()); set(year, month, day, hour, minute); } - /** - * Constructs a new {@code GregorianCalendar} initialized to the specified date and - * time in the default {@code TimeZone} and {@code Locale}. - * - * @param year - * the year. - * @param month - * the month. - * @param day - * the day of the month. - * @param hour - * the hour. - * @param minute - * the minute. - * @param second - * the second. - */ - public GregorianCalendar(int year, int month, int day, int hour, - int minute, int second) { - super(TimeZone.getDefault(), TLocale.getDefault()); + public GregorianCalendar(int year, int month, int day, int hour, int minute, int second) { set(year, month, day, hour, minute, second); } @@ -136,59 +81,16 @@ public class GregorianCalendar extends Calendar { setTimeInMillis(milliseconds); } - /** - * Constructs a new {@code GregorianCalendar} initialized to the current date and - * time and using the specified {@code Locale} and the default {@code TimeZone}. - * - * @param locale - * the {@code Locale}. - */ public GregorianCalendar(TLocale locale) { - this(TimeZone.getDefault(), locale); - } - - /** - * Constructs a new {@code GregorianCalendar} initialized to the current date and - * time and using the specified {@code TimeZone} and the default {@code Locale}. - * - * @param timezone - * the {@code TimeZone}. - */ - public GregorianCalendar(TimeZone timezone) { - this(timezone, TLocale.getDefault()); - } - - /** - * Constructs a new {@code GregorianCalendar} initialized to the current date and - * time and using the specified {@code TimeZone} and {@code Locale}. - * - * @param timezone - * the {@code TimeZone}. - * @param locale - * the {@code Locale}. - */ - public GregorianCalendar(TimeZone timezone, TLocale locale) { - super(timezone, locale); + super(locale); setTimeInMillis(System.currentTimeMillis()); } GregorianCalendar(@SuppressWarnings("unused") boolean ignored) { - super(TimeZone.getDefault()); setFirstDayOfWeek(SUNDAY); setMinimalDaysInFirstWeek(1); } - /** - * Adds the specified amount to a {@code Calendar} field. - * - * @param field - * the {@code Calendar} field to modify. - * @param value - * the amount to add to the field. - * - * @throws IllegalArgumentException - * if the specified field is DST_OFFSET or ZONE_OFFSET. - */ @Override public void add(int field, int value) { if (value == 0) { @@ -269,10 +171,9 @@ public class GregorianCalendar extends Calendar { break; } if (multiplier > 0) { - int zoneOffset = getTimeZone().getRawOffset(); - int offset = getOffset(time + zoneOffset); + int offset = getTimeZoneOffset((int)(time >> 32), (int)time); time += value * multiplier; - int newOffset = getOffset(time + zoneOffset); + int newOffset = getTimeZoneOffset((int)(time >> 32), (int)time); // Adjust for moving over a DST boundary if (newOffset != offset) { time += offset - newOffset; @@ -282,14 +183,9 @@ public class GregorianCalendar extends Calendar { complete(); } - /** - * Creates new instance of {@code GregorianCalendar} with the same properties. - * - * @return a shallow copy of this {@code GregorianCalendar}. - */ @Override public Object clone() { - GregorianCalendar thisClone = (GregorianCalendar) super.clone(); + GregorianCalendar thisClone = (GregorianCalendar)super.clone(); thisClone.cachedFields = cachedFields.clone(); return thisClone; } @@ -314,7 +210,7 @@ public class GregorianCalendar extends Calendar { int dayOfYear = computeYearAndDay(days, timeVal + zoneOffset); fields[DAY_OF_YEAR] = dayOfYear; - if(fields[YEAR] == changeYear && gregorianCutover <= timeVal + zoneOffset){ + if (fields[YEAR] == changeYear && gregorianCutover <= timeVal + zoneOffset) { dayOfYear += currentYearSkew; } int month = dayOfYear / 32; @@ -325,8 +221,7 @@ public class GregorianCalendar extends Calendar { month++; } fields[DAY_OF_WEEK] = mod7(days - 3) + 1; - int dstOffset = fields[YEAR] <= 0 ? 0 : getTimeZone().getOffset(AD, - fields[YEAR], month, date, fields[DAY_OF_WEEK], millis); + int dstOffset = getTimeZoneOffset((int)(timeVal >> 32), (int)timeVal); if (fields[YEAR] > 0) { dstOffset -= zoneOffset; } @@ -342,10 +237,9 @@ public class GregorianCalendar extends Calendar { days++; } if (oldDays != days) { - dayOfYear = computeYearAndDay(days, timeVal - zoneOffset - + dstOffset); + dayOfYear = computeYearAndDay(days, timeVal - zoneOffset + dstOffset); fields[DAY_OF_YEAR] = dayOfYear; - if(fields[YEAR] == changeYear && gregorianCutover <= timeVal - zoneOffset + dstOffset){ + if (fields[YEAR] == changeYear && gregorianCutover <= timeVal - zoneOffset + dstOffset) { dayOfYear += currentYearSkew; } month = dayOfYear / 32; @@ -378,18 +272,14 @@ public class GregorianCalendar extends Calendar { fields[MONTH] = month; fields[DATE] = date; fields[DAY_OF_WEEK_IN_MONTH] = (date - 1) / 7 + 1; - fields[WEEK_OF_MONTH] = (date - 1 + mod7(days - date - 2 - - (getFirstDayOfWeek() - 1))) / 7 + 1; - int daysFromStart = mod7(days - 3 - (fields[DAY_OF_YEAR] - 1) - - (getFirstDayOfWeek() - 1)); - int week = (fields[DAY_OF_YEAR] - 1 + daysFromStart) / 7 - + (7 - daysFromStart >= getMinimalDaysInFirstWeek() ? 1 : 0); + fields[WEEK_OF_MONTH] = (date - 1 + mod7(days - date - 2 - (getFirstDayOfWeek() - 1))) / 7 + 1; + int daysFromStart = mod7(days - 3 - (fields[DAY_OF_YEAR] - 1) - (getFirstDayOfWeek() - 1)); + int week = (fields[DAY_OF_YEAR] - 1 + daysFromStart) / 7 + + (7 - daysFromStart >= getMinimalDaysInFirstWeek() ? 1 : 0); if (week == 0) { - fields[WEEK_OF_YEAR] = 7 - mod7(daysFromStart - - (isLeapYear(fields[YEAR] - 1) ? 2 : 1)) >= getMinimalDaysInFirstWeek() ? 53 - : 52; - } else if (fields[DAY_OF_YEAR] >= (leapYear ? 367 : 366) - - mod7(daysFromStart + (leapYear ? 2 : 1))) { + fields[WEEK_OF_YEAR] = 7 - mod7(daysFromStart - + (isLeapYear(fields[YEAR] - 1) ? 2 : 1)) >= getMinimalDaysInFirstWeek() ? 53 : 52; + } else if (fields[DAY_OF_YEAR] >= (leapYear ? 367 : 366) - mod7(daysFromStart + (leapYear ? 2 : 1))) { fields[WEEK_OF_YEAR] = 7 - mod7(daysFromStart + (leapYear ? 2 : 1)) >= getMinimalDaysInFirstWeek() ? 1 : week; } else { @@ -397,16 +287,12 @@ public class GregorianCalendar extends Calendar { } } - private final void cachedFieldsCheckAndGet(long timeVal, - long newTimeMillis, long newTimeMillisAdjusted, int millis, - int zoneOffset) { + private final void cachedFieldsCheckAndGet(long timeVal, long newTimeMillis, long newTimeMillisAdjusted, + int millis, int zoneOffset) { int dstOffset = fields[DST_OFFSET]; - if (!isCached - || newTimeMillis >= nextMidnightMillis - || newTimeMillis <= lastMidnightMillis - || cachedFields[4] != zoneOffset - || (dstOffset == 0 && (newTimeMillisAdjusted >= nextMidnightMillis)) - || (dstOffset != 0 && (newTimeMillisAdjusted <= lastMidnightMillis))) { + if (!isCached || newTimeMillis >= nextMidnightMillis || newTimeMillis <= lastMidnightMillis || + cachedFields[4] != zoneOffset || (dstOffset == 0 && (newTimeMillisAdjusted >= nextMidnightMillis)) || + (dstOffset != 0 && (newTimeMillisAdjusted <= lastMidnightMillis))) { fullFieldsCalc(timeVal, millis, zoneOffset); isCached = false; } else { @@ -422,15 +308,18 @@ public class GregorianCalendar extends Calendar { } } + // TODO: implement using JavaScript native method + private static native int getTimeZoneOffset(int hitime, int lotime); + @Override protected void computeFields() { - int zoneOffset = getTimeZone().getRawOffset(); + int zoneOffset = getTimeZoneOffset((int)(time >>> 32), (int)time); - if(!isSet[ZONE_OFFSET]) { + if (!isSet[ZONE_OFFSET]) { fields[ZONE_OFFSET] = zoneOffset; } - int millis = (int) (time % 86400000); + int millis = (int)(time % 86400000); int savedMillis = millis; int dstOffset = fields[DST_OFFSET]; // compute without a change in daylight saving time @@ -470,20 +359,13 @@ public class GregorianCalendar extends Calendar { fields[HOUR] = fields[HOUR_OF_DAY] % 12; long newTimeAdjusted = newTime; - if (getTimeZone().useDaylightTime()) { - int dstSavings = ((SimpleTimeZone) getTimeZone()) - .getDSTSavings(); - newTimeAdjusted += (dstOffset == 0) ? dstSavings : -dstSavings; - } - if (newTime > 0L && newTimeAdjusted < 0L && dstOffset == 0) { newTimeAdjusted = 0x7fffffffffffffffL; } else if (newTime < 0L && newTimeAdjusted > 0L && dstOffset != 0) { newTimeAdjusted = 0x8000000000000000L; } - cachedFieldsCheckAndGet(time, newTime, newTimeAdjusted, - savedMillis, zoneOffset); + cachedFieldsCheckAndGet(time, newTime, newTimeAdjusted, savedMillis, zoneOffset); } else { fullFieldsCalc(time, savedMillis, zoneOffset); } @@ -493,10 +375,7 @@ public class GregorianCalendar extends Calendar { } // Caching - if (!isCached - && newTime != 0x7fffffffffffffffL - && newTime != 0x8000000000000000L - && (!getTimeZone().useDaylightTime() || getTimeZone() instanceof SimpleTimeZone)) { + if (!isCached && newTime != 0x7fffffffffffffffL && newTime != 0x8000000000000000L) { int cacheMillis = 0; cachedFields[0] = fields[YEAR]; @@ -540,24 +419,19 @@ public class GregorianCalendar extends Calendar { if (isSet[SECOND] && (fields[SECOND] < 0 || fields[SECOND] > 59)) { throw new IllegalArgumentException(); } - if (isSet[MILLISECOND] - && (fields[MILLISECOND] < 0 || fields[MILLISECOND] > 999)) { + if (isSet[MILLISECOND] && (fields[MILLISECOND] < 0 || fields[MILLISECOND] > 999)) { throw new IllegalArgumentException(); } - if (isSet[WEEK_OF_YEAR] - && (fields[WEEK_OF_YEAR] < 1 || fields[WEEK_OF_YEAR] > 53)) { + if (isSet[WEEK_OF_YEAR] && (fields[WEEK_OF_YEAR] < 1 || fields[WEEK_OF_YEAR] > 53)) { throw new IllegalArgumentException(); } - if (isSet[DAY_OF_WEEK] - && (fields[DAY_OF_WEEK] < 1 || fields[DAY_OF_WEEK] > 7)) { + if (isSet[DAY_OF_WEEK] && (fields[DAY_OF_WEEK] < 1 || fields[DAY_OF_WEEK] > 7)) { throw new IllegalArgumentException(); } - if (isSet[DAY_OF_WEEK_IN_MONTH] - && (fields[DAY_OF_WEEK_IN_MONTH] < 1 || fields[DAY_OF_WEEK_IN_MONTH] > 6)) { + if (isSet[DAY_OF_WEEK_IN_MONTH] && (fields[DAY_OF_WEEK_IN_MONTH] < 1 || fields[DAY_OF_WEEK_IN_MONTH] > 6)) { throw new IllegalArgumentException(); } - if (isSet[WEEK_OF_MONTH] - && (fields[WEEK_OF_MONTH] < 1 || fields[WEEK_OF_MONTH] > 6)) { + if (isSet[WEEK_OF_MONTH] && (fields[WEEK_OF_MONTH] < 1 || fields[WEEK_OF_MONTH] > 6)) { throw new IllegalArgumentException(); } if (isSet[AM_PM] && fields[AM_PM] != AM && fields[AM_PM] != PM) { @@ -567,8 +441,7 @@ public class GregorianCalendar extends Calendar { throw new IllegalArgumentException(); } if (isSet[YEAR]) { - if (isSet[ERA] && fields[ERA] == BC - && (fields[YEAR] < 1 || fields[YEAR] > 292269054)) { + if (isSet[ERA] && fields[ERA] == BC && (fields[YEAR] < 1 || fields[YEAR] > 292269054)) { throw new IllegalArgumentException(); } else if (fields[YEAR] < 1 || fields[YEAR] > 292278994) { throw new IllegalArgumentException(); @@ -589,10 +462,10 @@ public class GregorianCalendar extends Calendar { timeVal = hour * 3600000; if (isSet[MINUTE]) { - timeVal += ((long) fields[MINUTE]) * 60000; + timeVal += ((long)fields[MINUTE]) * 60000; } if (isSet[SECOND]) { - timeVal += ((long) fields[SECOND]) * 1000; + timeVal += ((long)fields[SECOND]) * 1000; } if (isSet[MILLISECOND]) { timeVal += fields[MILLISECOND]; @@ -610,15 +483,11 @@ public class GregorianCalendar extends Calendar { } } - boolean weekMonthSet = isSet[WEEK_OF_MONTH] - || isSet[DAY_OF_WEEK_IN_MONTH]; - boolean useMonth = (isSet[DATE] || isSet[MONTH] || weekMonthSet) - && lastDateFieldSet != DAY_OF_YEAR; - if (useMonth - && (lastDateFieldSet == DAY_OF_WEEK || lastDateFieldSet == WEEK_OF_YEAR)) { + boolean weekMonthSet = isSet[WEEK_OF_MONTH] || isSet[DAY_OF_WEEK_IN_MONTH]; + boolean useMonth = (isSet[DATE] || isSet[MONTH] || weekMonthSet) && lastDateFieldSet != DAY_OF_YEAR; + if (useMonth && (lastDateFieldSet == DAY_OF_WEEK || lastDateFieldSet == WEEK_OF_YEAR)) { if (isSet[WEEK_OF_YEAR] && isSet[DAY_OF_WEEK]) { - useMonth = lastDateFieldSet != WEEK_OF_YEAR && weekMonthSet - && isSet[DAY_OF_WEEK]; + useMonth = lastDateFieldSet != WEEK_OF_YEAR && weekMonthSet && isSet[DAY_OF_WEEK]; } else if (isSet[DAY_OF_YEAR]) { useMonth = isSet[DATE] && isSet[MONTH]; } @@ -635,15 +504,12 @@ public class GregorianCalendar extends Calendar { boolean leapYear = isLeapYear(year); days = daysFromBaseYear(year) + daysInYear(leapYear, month); boolean useDate = isSet[DATE]; - if (useDate - && (lastDateFieldSet == DAY_OF_WEEK - || lastDateFieldSet == WEEK_OF_MONTH || lastDateFieldSet == DAY_OF_WEEK_IN_MONTH)) { + if (useDate && + (lastDateFieldSet == DAY_OF_WEEK || lastDateFieldSet == WEEK_OF_MONTH || lastDateFieldSet == DAY_OF_WEEK_IN_MONTH)) { useDate = !(isSet[DAY_OF_WEEK] && weekMonthSet); } if (useDate) { - if (!isLenient() - && (fields[DATE] < 1 || fields[DATE] > daysInMonth( - leapYear, month))) { + if (!isLenient() && (fields[DATE] < 1 || fields[DATE] > daysInMonth(leapYear, month))) { throw new IllegalArgumentException(); } days += fields[DATE] - 1; @@ -654,20 +520,16 @@ public class GregorianCalendar extends Calendar { } else { dayOfWeek = getFirstDayOfWeek() - 1; } - if (isSet[WEEK_OF_MONTH] - && lastDateFieldSet != DAY_OF_WEEK_IN_MONTH) { + if (isSet[WEEK_OF_MONTH] && lastDateFieldSet != DAY_OF_WEEK_IN_MONTH) { int skew = mod7(days - 3 - (getFirstDayOfWeek() - 1)); - days += (fields[WEEK_OF_MONTH] - 1) * 7 - + mod7(skew + dayOfWeek - (days - 3)) - skew; + days += (fields[WEEK_OF_MONTH] - 1) * 7 + mod7(skew + dayOfWeek - (days - 3)) - skew; } else if (isSet[DAY_OF_WEEK_IN_MONTH]) { if (fields[DAY_OF_WEEK_IN_MONTH] >= 0) { - days += mod7(dayOfWeek - (days - 3)) - + (fields[DAY_OF_WEEK_IN_MONTH] - 1) * 7; + days += mod7(dayOfWeek - (days - 3)) + (fields[DAY_OF_WEEK_IN_MONTH] - 1) * 7; } else { - days += daysInMonth(leapYear, month) - + mod7(dayOfWeek - - (days + daysInMonth(leapYear, month) - 3)) - + fields[DAY_OF_WEEK_IN_MONTH] * 7; + days += daysInMonth(leapYear, month) + + mod7(dayOfWeek - (days + daysInMonth(leapYear, month) - 3)) + + fields[DAY_OF_WEEK_IN_MONTH] * 7; } } else if (isSet[DAY_OF_WEEK]) { int skew = mod7(days - 3 - (getFirstDayOfWeek() - 1)); @@ -675,8 +537,7 @@ public class GregorianCalendar extends Calendar { } } } else { - boolean useWeekYear = isSet[WEEK_OF_YEAR] - && lastDateFieldSet != DAY_OF_YEAR; + boolean useWeekYear = isSet[WEEK_OF_YEAR] && lastDateFieldSet != DAY_OF_YEAR; if (useWeekYear && isSet[DAY_OF_YEAR]) { useWeekYear = isSet[DAY_OF_WEEK]; } @@ -689,15 +550,13 @@ public class GregorianCalendar extends Calendar { dayOfWeek = getFirstDayOfWeek() - 1; } int skew = mod7(days - 3 - (getFirstDayOfWeek() - 1)); - days += (fields[WEEK_OF_YEAR] - 1) * 7 - + mod7(skew + dayOfWeek - (days - 3)) - skew; + days += (fields[WEEK_OF_YEAR] - 1) * 7 + mod7(skew + dayOfWeek - (days - 3)) - skew; if (7 - skew < getMinimalDaysInFirstWeek()) { days += 7; } } else if (isSet[DAY_OF_YEAR]) { - if (!isLenient() - && (fields[DAY_OF_YEAR] < 1 || fields[DAY_OF_YEAR] > (365 + (isLeapYear(year) ? 1 - : 0)))) { + if (!isLenient() && + (fields[DAY_OF_YEAR] < 1 || fields[DAY_OF_YEAR] > (365 + (isLeapYear(year) ? 1 : 0)))) { throw new IllegalArgumentException(); } days += fields[DAY_OF_YEAR] - 1; @@ -709,22 +568,11 @@ public class GregorianCalendar extends Calendar { timeVal += days * 86400000; // Use local time to compare with the gregorian change - if (year == changeYear - && timeVal >= gregorianCutover + julianError() * 86400000L) { + if (year == changeYear && timeVal >= gregorianCutover + julianError() * 86400000L) { timeVal -= julianError() * 86400000L; } - // It is not possible to simply subtract getOffset(timeVal) from timeVal - // to get UTC. - // The trick is needed for the moment when DST transition occurs, - // say 1:00 is a transition time when DST offset becomes +1 hour, - // then wall time in the interval 1:00 - 2:00 is invalid and is - // treated as UTC time. - long timeValWithoutDST = timeVal - getOffset(timeVal) - + getTimeZone().getRawOffset(); - timeVal -= getOffset(timeValWithoutDST); - // Need to update wall time in fields, since it was invalid due to DST - // transition + long timeValWithoutDST = timeVal - getTimeZoneOffset((int)(timeVal >> 32), (int)timeVal); this.time = timeVal; if (timeValWithoutDST != timeVal) { computeFields(); @@ -740,7 +588,7 @@ public class GregorianCalendar extends Calendar { } int approxYears; - while ((approxYears = (int) (days / 365)) != 0) { + while ((approxYears = (int)(days / 365)) != 0) { year = year + approxYears; days = dayCount - daysFromBaseYear(year); } @@ -749,7 +597,7 @@ public class GregorianCalendar extends Calendar { days = days + daysInYear(year); } fields[YEAR] = year; - return (int) days + 1; + return (int)days + 1; } private long daysFromBaseYear(int iyear) { @@ -760,11 +608,11 @@ public class GregorianCalendar extends Calendar { if (year > changeYear) { days -= ((year - 1901) / 100) - ((year - 1601) / 400); } else { - if(year == changeYear){ + if (year == changeYear) { days += currentYearSkew; - }else if(year == changeYear -1){ + } else if (year == changeYear - 1) { days += lastYearSkew; - }else{ + } else { days += julianSkew; } } @@ -772,8 +620,7 @@ public class GregorianCalendar extends Calendar { } else if (year <= changeYear) { return (year - 1970) * 365 + ((year - 1972) / 4) + julianSkew; } - return (year - 1970) * 365 + ((year - 1972) / 4) - - ((year - 2000) / 100) + ((year - 2000) / 400); + return (year - 1970) * 365 + ((year - 1972) / 4) - ((year - 2000) / 100) + ((year - 2000) / 400); } private int daysInMonth() { @@ -808,23 +655,23 @@ public class GregorianCalendar extends Calendar { } /** - * Compares the specified {@code Object} to this {@code GregorianCalendar} and returns whether - * they are equal. To be equal, the {@code Object} must be an instance of {@code GregorianCalendar} and - * have the same properties. + * Compares the specified {@code Object} to this {@code GregorianCalendar} + * and returns whether they are equal. To be equal, the {@code Object} must + * be an instance of {@code GregorianCalendar} and have the same properties. * * @param object - * the {@code Object} to compare with this {@code GregorianCalendar}. + * the {@code Object} to compare with this + * {@code GregorianCalendar}. * @return {@code true} if {@code object} is equal to this * {@code GregorianCalendar}, {@code false} otherwise. * @throws IllegalArgumentException - * if the time is not set and the time cannot be computed - * from the current field values. + * if the time is not set and the time cannot be computed from + * the current field values. * @see #hashCode */ @Override public boolean equals(Object object) { - return super.equals(object) - && gregorianCutover == ((GregorianCalendar) object).gregorianCutover; + return super.equals(object) && gregorianCutover == ((GregorianCalendar)object).gregorianCutover; } /** @@ -873,11 +720,10 @@ public class GregorianCalendar extends Calendar { case DAY_OF_YEAR: return daysInYear(fields[YEAR]); case DAY_OF_WEEK_IN_MONTH: - result = get(DAY_OF_WEEK_IN_MONTH) - + ((daysInMonth() - get(DATE)) / 7); + result = get(DAY_OF_WEEK_IN_MONTH) + ((daysInMonth() - get(DATE)) / 7); break; case YEAR: - GregorianCalendar clone = (GregorianCalendar) clone(); + GregorianCalendar clone = (GregorianCalendar)clone(); if (get(ERA) == AD) { clone.setTimeInMillis(Long.MAX_VALUE); } else { @@ -899,8 +745,7 @@ public class GregorianCalendar extends Calendar { /** * Gets the minimum value of the specified field for the current date. For - * the gregorian calendar, this value is the same as - * {@code getMinimum()}. + * the gregorian calendar, this value is the same as {@code getMinimum()}. * * @param field * the field. @@ -946,8 +791,7 @@ public class GregorianCalendar extends Calendar { public int getLeastMaximum(int field) { // return value for WEEK_OF_YEAR should make corresponding changes when // the gregorian change date have been reset. - if (gregorianCutover != defaultGregorianCutover - && field == WEEK_OF_YEAR) { + if (gregorianCutover != defaultGregorianCutover && field == WEEK_OF_YEAR) { long currentTimeInMillis = time; setTimeInMillis(gregorianCutover); int actual = getActualMaximum(field); @@ -982,55 +826,6 @@ public class GregorianCalendar extends Calendar { return minimums[field]; } - int getOffset(long localTime) { - TimeZone timeZone = getTimeZone(); - if (!timeZone.useDaylightTime()) { - return timeZone.getRawOffset(); - } - - long dayCount = localTime / 86400000; - int millis = (int) (localTime % 86400000); - if (millis < 0) { - millis += 86400000; - dayCount--; - } - - int year = 1970; - long days = dayCount; - if (localTime < gregorianCutover) { - days -= julianSkew; - } - int approxYears; - - while ((approxYears = (int) (days / 365)) != 0) { - year = year + approxYears; - days = dayCount - daysFromBaseYear(year); - } - if (days < 0) { - year = year - 1; - days = days + 365 + (isLeapYear(year) ? 1 : 0); - if (year == changeYear && localTime < gregorianCutover) { - days -= julianError(); - } - } - if (year <= 0) { - return timeZone.getRawOffset(); - } - int dayOfYear = (int) days + 1; - - int month = dayOfYear / 32; - boolean leapYear = isLeapYear(year); - int date = dayOfYear - daysInYear(leapYear, month); - if (date > daysInMonth(leapYear, month)) { - date -= daysInMonth(leapYear, month); - month++; - } - int dayOfWeek = mod7(dayCount - 3) + 1; - int offset = timeZone.getOffset(AD, year, month, date, dayOfWeek, - millis); - return offset; - } - /** * Returns an integer hash code for the receiver. Objects which are equal * return the same value for this method. @@ -1041,8 +836,7 @@ public class GregorianCalendar extends Calendar { */ @Override public int hashCode() { - return super.hashCode() - + ((int) (gregorianCutover >>> 32) ^ (int) gregorianCutover); + return super.hashCode() + ((int)(gregorianCutover >>> 32) ^ (int)gregorianCutover); } /** @@ -1074,7 +868,7 @@ public class GregorianCalendar extends Calendar { } private int mod7(long num1) { - int rem = (int) (num1 % 7); + int rem = (int)(num1 % 7); if (num1 < 0 && rem < 0) { return rem + 7; } @@ -1093,7 +887,7 @@ public class GregorianCalendar extends Calendar { * the amount to add. * * @throws IllegalArgumentException - * if an invalid field is specified. + * if an invalid field is specified. */ @Override public void roll(int field, int value) { @@ -1110,87 +904,85 @@ public class GregorianCalendar extends Calendar { int days, day, mod, maxWeeks, newWeek; int max = -1; switch (field) { - case YEAR: - max = maximums[field]; - break; - case WEEK_OF_YEAR: - days = daysInYear(fields[YEAR]); - day = DAY_OF_YEAR; - mod = mod7(fields[DAY_OF_WEEK] - fields[day] - - (getFirstDayOfWeek() - 1)); - maxWeeks = (days - 1 + mod) / 7 + 1; - newWeek = mod(fields[field] - 1 + value, maxWeeks) + 1; - if (newWeek == maxWeeks) { - int addDays = (newWeek - fields[field]) * 7; - if (fields[day] > addDays && fields[day] + addDays > days) { - set(field, 1); - } else { - set(field, newWeek - 1); - } - } else if (newWeek == 1) { - int week = (fields[day] - ((fields[day] - 1) / 7 * 7) - 1 + mod) / 7 + 1; - if (week > 1) { - set(field, 1); + case YEAR: + max = maximums[field]; + break; + case WEEK_OF_YEAR: + days = daysInYear(fields[YEAR]); + day = DAY_OF_YEAR; + mod = mod7(fields[DAY_OF_WEEK] - fields[day] - (getFirstDayOfWeek() - 1)); + maxWeeks = (days - 1 + mod) / 7 + 1; + newWeek = mod(fields[field] - 1 + value, maxWeeks) + 1; + if (newWeek == maxWeeks) { + int addDays = (newWeek - fields[field]) * 7; + if (fields[day] > addDays && fields[day] + addDays > days) { + set(field, 1); + } else { + set(field, newWeek - 1); + } + } else if (newWeek == 1) { + int week = (fields[day] - ((fields[day] - 1) / 7 * 7) - 1 + mod) / 7 + 1; + if (week > 1) { + set(field, 1); + } else { + set(field, newWeek); + } } else { set(field, newWeek); } - } else { - set(field, newWeek); - } - break; - case WEEK_OF_MONTH: - days = daysInMonth(); - day = DATE; - mod = mod7(fields[DAY_OF_WEEK] - fields[day] - - (getFirstDayOfWeek() - 1)); - maxWeeks = (days - 1 + mod) / 7 + 1; - newWeek = mod(fields[field] - 1 + value, maxWeeks) + 1; - if (newWeek == maxWeeks) { - if (fields[day] + (newWeek - fields[field]) * 7 > days) { - set(day, days); + break; + case WEEK_OF_MONTH: + days = daysInMonth(); + day = DATE; + mod = mod7(fields[DAY_OF_WEEK] - fields[day] - (getFirstDayOfWeek() - 1)); + maxWeeks = (days - 1 + mod) / 7 + 1; + newWeek = mod(fields[field] - 1 + value, maxWeeks) + 1; + if (newWeek == maxWeeks) { + if (fields[day] + (newWeek - fields[field]) * 7 > days) { + set(day, days); + } else { + set(field, newWeek); + } + } else if (newWeek == 1) { + int week = (fields[day] - ((fields[day] - 1) / 7 * 7) - 1 + mod) / 7 + 1; + if (week > 1) { + set(day, 1); + } else { + set(field, newWeek); + } } else { set(field, newWeek); } - } else if (newWeek == 1) { - int week = (fields[day] - ((fields[day] - 1) / 7 * 7) - 1 + mod) / 7 + 1; - if (week > 1) { - set(day, 1); - } else { - set(field, newWeek); - } - } else { - set(field, newWeek); - } - break; - case DATE: - max = daysInMonth(); - break; - case DAY_OF_YEAR: - max = daysInYear(fields[YEAR]); - break; - case DAY_OF_WEEK: - max = maximums[field]; - lastDateFieldSet = WEEK_OF_MONTH; - break; - case DAY_OF_WEEK_IN_MONTH: - max = (fields[DATE] + ((daysInMonth() - fields[DATE]) / 7 * 7) - 1) / 7 + 1; - break; + break; + case DATE: + max = daysInMonth(); + break; + case DAY_OF_YEAR: + max = daysInYear(fields[YEAR]); + break; + case DAY_OF_WEEK: + max = maximums[field]; + lastDateFieldSet = WEEK_OF_MONTH; + break; + case DAY_OF_WEEK_IN_MONTH: + max = (fields[DATE] + ((daysInMonth() - fields[DATE]) / 7 * 7) - 1) / 7 + 1; + break; - case ERA: - case MONTH: - case AM_PM: - case HOUR: - case HOUR_OF_DAY: - case MINUTE: - case SECOND: - case MILLISECOND: - set(field, mod(fields[field] + value, maximums[field] + 1)); - if (field == MONTH && fields[DATE] > daysInMonth()) { - set(DATE, daysInMonth()); - } else if (field == AM_PM) { - lastTimeFieldSet = HOUR; - } - break; + case ERA: + case MONTH: + case AM_PM: + case HOUR: + case HOUR_OF_DAY: + case MINUTE: + case SECOND: + case MILLISECOND: + set(field, mod(fields[field] + value, maximums[field] + 1)); + if (field == MONTH && fields[DATE] > daysInMonth()) { + set(DATE, daysInMonth()); + } else if (field == AM_PM) { + lastTimeFieldSet = HOUR; + } + break; } if (max != -1) { set(field, mod(fields[field] - 1 + value, max) + 1); @@ -1211,7 +1003,7 @@ public class GregorianCalendar extends Calendar { * {@code true} to increment the field, {@code false} to * decrement. * @throws IllegalArgumentException - * if an invalid field is specified. + * if an invalid field is specified. */ @Override public void roll(int field, boolean increment) { @@ -1226,18 +1018,17 @@ public class GregorianCalendar extends Calendar { */ public void setGregorianChange(Date date) { gregorianCutover = date.getTime(); - GregorianCalendar cal = new GregorianCalendar(TimeZone.GMT); + GregorianCalendar cal = new GregorianCalendar(); cal.setTime(date); changeYear = cal.get(YEAR); if (cal.get(ERA) == BC) { changeYear = 1 - changeYear; } - julianSkew = ((changeYear - 2000) / 400) + julianError() - - ((changeYear - 2000) / 100); + julianSkew = ((changeYear - 2000) / 400) + julianError() - ((changeYear - 2000) / 100); isCached = false; int dayOfYear = cal.get(DAY_OF_YEAR); if (dayOfYear < julianSkew) { - currentYearSkew = dayOfYear-1; + currentYearSkew = dayOfYear - 1; lastYearSkew = julianSkew - dayOfYear + 1; } else { lastYearSkew = 0; diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/SimpleTimeZone.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/SimpleTimeZone.java deleted file mode 100644 index edb563faa..000000000 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/SimpleTimeZone.java +++ /dev/null @@ -1,373 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.teavm.classlib.java.util; - -public class SimpleTimeZone extends TimeZone { - - private int rawOffset; - - private int startYear, startMonth, startDay, startDayOfWeek, startTime; - - private int endMonth, endDay, endDayOfWeek, endTime; - - private int startMode, endMode; - - private static final int DOM_MODE = 1, DOW_IN_MONTH_MODE = 2, DOW_GE_DOM_MODE = 3, DOW_LE_DOM_MODE = 4; - - public static final int UTC_TIME = 2; - - public static final int STANDARD_TIME = 1; - - public static final int WALL_TIME = 0; - - private boolean useDaylight; - - private GregorianCalendar daylightSavings; - - private int dstSavings = 3600000; - - private final transient boolean isSimple; - - public SimpleTimeZone(int offset, final String name) { - setID(name); - rawOffset = offset; - icuTZ = getICUTimeZone(name); - if (icuTZ instanceof com.ibm.icu.util.SimpleTimeZone) { - isSimple = true; - icuTZ.setRawOffset(offset); - } else { - isSimple = false; - } - useDaylight = icuTZ.useDaylightTime(); - } - - public SimpleTimeZone(int offset, String name, int startMonth, int startDay, int startDayOfWeek, int startTime, - int endMonth, int endDay, int endDayOfWeek, int endTime) { - this(offset, name, startMonth, startDay, startDayOfWeek, startTime, endMonth, endDay, endDayOfWeek, endTime, - 3600000); - } - - public SimpleTimeZone(int offset, String name, int startMonth, int startDay, int startDayOfWeek, int startTime, - int endMonth, int endDay, int endDayOfWeek, int endTime, int daylightSavings) { - icuTZ = getICUTimeZone(name); - if (icuTZ instanceof com.ibm.icu.util.SimpleTimeZone) { - isSimple = true; - com.ibm.icu.util.SimpleTimeZone tz = (com.ibm.icu.util.SimpleTimeZone) icuTZ; - tz.setRawOffset(offset); - tz.setStartRule(startMonth, startDay, startDayOfWeek, startTime); - tz.setEndRule(endMonth, endDay, endDayOfWeek, endTime); - tz.setDSTSavings(daylightSavings); - } else { - isSimple = false; - } - setID(name); - rawOffset = offset; - if (daylightSavings <= 0) { - throw new IllegalArgumentException(String.valueOf(daylightSavings)); - } - dstSavings = daylightSavings; - - setStartRule(startMonth, startDay, startDayOfWeek, startTime); - setEndRule(endMonth, endDay, endDayOfWeek, endTime); - - useDaylight = daylightSavings > 0 || icuTZ.useDaylightTime(); - } - - public SimpleTimeZone(int offset, String name, int startMonth, int startDay, int startDayOfWeek, int startTime, - int startTimeMode, int endMonth, int endDay, int endDayOfWeek, int endTime, int endTimeMode, - int daylightSavings) { - - this(offset, name, startMonth, startDay, startDayOfWeek, startTime, endMonth, endDay, endDayOfWeek, endTime, - daylightSavings); - startMode = startTimeMode; - endMode = endTimeMode; - } - - @Override - public Object clone() { - SimpleTimeZone zone = (SimpleTimeZone) super.clone(); - if (daylightSavings != null) { - zone.daylightSavings = (GregorianCalendar) daylightSavings.clone(); - } - return zone; - } - - @Override - public boolean equals(Object object) { - if (!(object instanceof SimpleTimeZone)) { - return false; - } - SimpleTimeZone tz = (SimpleTimeZone) object; - return getID().equals(tz.getID()) && - rawOffset == tz.rawOffset && - useDaylight == tz.useDaylight && - (!useDaylight || (startYear == tz.startYear && startMonth == tz.startMonth && startDay == tz.startDay && - startMode == tz.startMode && startDayOfWeek == tz.startDayOfWeek && startTime == tz.startTime && - endMonth == tz.endMonth && endDay == tz.endDay && endDayOfWeek == tz.endDayOfWeek && - endTime == tz.endTime && endMode == tz.endMode && dstSavings == tz.dstSavings)); - } - - @Override - public int getDSTSavings() { - if (!useDaylight) { - return 0; - } - return dstSavings; - } - - @Override - public int getOffset(int era, int year, int month, int day, int dayOfWeek, int time) { - if (era != GregorianCalendar.BC && era != GregorianCalendar.AD) { - throw new IllegalArgumentException(String.valueOf(era)); - } - checkRange(month, dayOfWeek, time); - if (month != Calendar.FEBRUARY || day != 29 || !isLeapYear(year)) { - checkDay(month, day); - } - return icuTZ.getOffset(era, year, month, day, dayOfWeek, time); - } - - @Override - public int getOffset(long time) { - return icuTZ.getOffset(time); - } - - @Override - public int getRawOffset() { - return rawOffset; - } - - @Override - public synchronized int hashCode() { - int hashCode = getID().hashCode() + rawOffset; - if (useDaylight) { - hashCode += startYear + startMonth + startDay + startDayOfWeek + startTime + startMode + endMonth + endDay + - endDayOfWeek + endTime + endMode + dstSavings; - } - return hashCode; - } - - @Override - public boolean hasSameRules(TimeZone zone) { - if (!(zone instanceof SimpleTimeZone)) { - return false; - } - SimpleTimeZone tz = (SimpleTimeZone) zone; - if (useDaylight != tz.useDaylight) { - return false; - } - if (!useDaylight) { - return rawOffset == tz.rawOffset; - } - return rawOffset == tz.rawOffset && dstSavings == tz.dstSavings && startYear == tz.startYear && - startMonth == tz.startMonth && startDay == tz.startDay && startMode == tz.startMode && - startDayOfWeek == tz.startDayOfWeek && startTime == tz.startTime && endMonth == tz.endMonth && - endDay == tz.endDay && endDayOfWeek == tz.endDayOfWeek && endTime == tz.endTime && - endMode == tz.endMode; - } - - @Override - public boolean inDaylightTime(Date time) { - return icuTZ.inDaylightTime(time); - } - - private boolean isLeapYear(int year) { - if (year > 1582) { - return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); - } - return year % 4 == 0; - } - - public void setDSTSavings(int milliseconds) { - if (milliseconds > 0) { - dstSavings = milliseconds; - } else { - throw new IllegalArgumentException(); - } - } - - private void checkRange(int month, int dayOfWeek, int time) { - if (month < Calendar.JANUARY || month > Calendar.DECEMBER) { - throw new IllegalArgumentException(String.valueOf(month)); - } - if (dayOfWeek < Calendar.SUNDAY || dayOfWeek > Calendar.SATURDAY) { - throw new IllegalArgumentException(String.valueOf(dayOfWeek)); - } - if (time < 0 || time >= 24 * 3600000) { - throw new IllegalArgumentException(String.valueOf(time)); - } - } - - private void checkDay(int month, int day) { - if (day <= 0 || day > GregorianCalendar.DaysInMonth[month]) { - throw new IllegalArgumentException(String.valueOf(day)); - } - } - - private void setEndMode() { - if (endDayOfWeek == 0) { - endMode = DOM_MODE; - } else if (endDayOfWeek < 0) { - endDayOfWeek = -endDayOfWeek; - if (endDay < 0) { - endDay = -endDay; - endMode = DOW_LE_DOM_MODE; - } else { - endMode = DOW_GE_DOM_MODE; - } - } else { - endMode = DOW_IN_MONTH_MODE; - } - useDaylight = startDay != 0 && endDay != 0; - if (endDay != 0) { - checkRange(endMonth, endMode == DOM_MODE ? 1 : endDayOfWeek, endTime); - if (endMode != DOW_IN_MONTH_MODE) { - checkDay(endMonth, endDay); - } else { - if (endDay < -5 || endDay > 5) { - throw new IllegalArgumentException(Messages.getString("luni.40", endDay)); //$NON-NLS-1$ - } - } - } - if (endMode != DOM_MODE) { - endDayOfWeek--; - } - } - - public void setEndRule(int month, int dayOfMonth, int time) { - endMonth = month; - endDay = dayOfMonth; - endDayOfWeek = 0; // Initialize this value for hasSameRules() - endTime = time; - setEndMode(); - if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, dayOfMonth, time); - } - } - - public void setEndRule(int month, int day, int dayOfWeek, int time) { - endMonth = month; - endDay = day; - endDayOfWeek = dayOfWeek; - endTime = time; - setEndMode(); - if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, day, dayOfWeek, time); - } - } - - public void setEndRule(int month, int day, int dayOfWeek, int time, boolean after) { - endMonth = month; - endDay = after ? day : -day; - endDayOfWeek = -dayOfWeek; - endTime = time; - setEndMode(); - if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, day, dayOfWeek, time, after); - } - } - - @Override - public void setRawOffset(int offset) { - rawOffset = offset; - icuTZ.setRawOffset(offset); - } - - private void setStartMode() { - if (startDayOfWeek == 0) { - startMode = DOM_MODE; - } else if (startDayOfWeek < 0) { - startDayOfWeek = -startDayOfWeek; - if (startDay < 0) { - startDay = -startDay; - startMode = DOW_LE_DOM_MODE; - } else { - startMode = DOW_GE_DOM_MODE; - } - } else { - startMode = DOW_IN_MONTH_MODE; - } - useDaylight = startDay != 0 && endDay != 0; - if (startDay != 0) { - checkRange(startMonth, startMode == DOM_MODE ? 1 : startDayOfWeek, startTime); - if (startMode != DOW_IN_MONTH_MODE) { - checkDay(startMonth, startDay); - } else { - if (startDay < -5 || startDay > 5) { - throw new IllegalArgumentException(Messages.getString("luni.40", startDay)); //$NON-NLS-1$ - } - } - } - if (startMode != DOM_MODE) { - startDayOfWeek--; - } - } - - public void setStartRule(int month, int dayOfMonth, int time) { - startMonth = month; - startDay = dayOfMonth; - startDayOfWeek = 0; // Initialize this value for hasSameRules() - startTime = time; - setStartMode(); - if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, dayOfMonth, time); - } - } - - public void setStartRule(int month, int day, int dayOfWeek, int time) { - startMonth = month; - startDay = day; - startDayOfWeek = dayOfWeek; - startTime = time; - setStartMode(); - if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, day, dayOfWeek, time); - } - } - - public void setStartRule(int month, int day, int dayOfWeek, int time, boolean after) { - startMonth = month; - startDay = after ? day : -day; - startDayOfWeek = -dayOfWeek; - startTime = time; - setStartMode(); - if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, day, dayOfWeek, time, after); - } - } - - public void setStartYear(int year) { - startYear = year; - useDaylight = true; - } - - @Override - public String toString() { - return getClass().getName() + "[id=" + getID() + ",offset=" + rawOffset + ",dstSavings=" + dstSavings + - ",useDaylight=" + useDaylight + ",startYear=" + startYear + ",startMode=" + startMode + ",startMonth=" + - startMonth + ",startDay=" + startDay + ",startDayOfWeek=" + - (useDaylight && (startMode != DOM_MODE) ? startDayOfWeek + 1 : 0) + ",startTime=" + startTime + - ",endMode=" + endMode + ",endMonth=" + endMonth + ",endDay=" + endDay + ",endDayOfWeek=" + - (useDaylight && (endMode != DOM_MODE) ? endDayOfWeek + 1 : 0) + ",endTime=" + endTime + "]"; - } - - @Override - public boolean useDaylightTime() { - return useDaylight; - } -} diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TimeZone.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TimeZone.java deleted file mode 100644 index 9a2ec1fd2..000000000 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TimeZone.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright 2014 Alexey Andreev. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.teavm.classlib.java.util; - -import org.teavm.classlib.java.io.TSerializable; -import org.teavm.classlib.java.lang.TCloneable; - -public abstract class TimeZone implements TSerializable, TCloneable { - private static final long serialVersionUID = 3581463369166924961L; - - public static final int SHORT = 0; - - public static final int LONG = 1; - - private static THashMap AvailableZones; - - private static TimeZone Default; - - static TimeZone GMT = new SimpleTimeZone(0, "GMT"); // Greenwich Mean Time - - private String ID; - - private static void initializeAvailable() { - TimeZone[] zones = TimeZones.getTimeZones(); - AvailableZones = new THashMap<>((zones.length + 1) * 4 / 3); - AvailableZones.put(GMT.getID(), GMT); - for (int i = 0; i < zones.length; i++) { - AvailableZones.put(zones[i].getID(), zones[i]); - } - } - - public TimeZone() { - } - - @Override - public Object clone() { - try { - TimeZone zone = (TimeZone) super.clone(); - return zone; - } catch (CloneNotSupportedException e) { - return null; - } - } - - public static synchronized String[] getAvailableIDs() { - return AvailableZones.keySet().toArray(new String[0]); - } - - public static synchronized String[] getAvailableIDs(int offset) { - TList result = new TArrayList<>(); - for (TIterator iter = AvailableZones.values().iterator(); iter.hasNext();) { - TimeZone tz = iter.next(); - if (tz.getRawOffset() == offset) { - result.add(tz.getID()); - } - } - return result.toArray(new String[0]); - } - - public static synchronized TimeZone getDefault() { - if (Default == null) { - setDefault(null); - } - return (TimeZone) Default.clone(); - } - - public final String getDisplayName() { - return getDisplayName(false, LONG, TLocale.getDefault()); - } - - public final String getDisplayName(TLocale locale) { - return getDisplayName(false, LONG, locale); - } - - public final String getDisplayName(boolean daylightTime, int style) { - return getDisplayName(daylightTime, style, TLocale.getDefault()); - } - - public String getDisplayName(boolean daylightTime, int style, TLocale locale) { - if (icuTimeZone == null || !ID.equals(icuTimeZone.getID())) { - icuTimeZone = com.ibm.icu.util.TimeZone.getTimeZone(ID); - } - return icuTimeZone.getDisplayName(daylightTime, style, locale); - } - - public String getID() { - return ID; - } - - public int getDSTSavings() { - if (useDaylightTime()) { - return 3600000; - } - return 0; - } - - public int getOffset(long time) { - if (inDaylightTime(new Date(time))) { - return getRawOffset() + getDSTSavings(); - } - return getRawOffset(); - } - - abstract public int getOffset(int era, int year, int month, int day, int dayOfWeek, int time); - - abstract public int getRawOffset(); - - public static synchronized TimeZone getTimeZone(String name) { - if (AvailableZones == null) { - initializeAvailable(); - } - - TimeZone zone = AvailableZones.get(name); - if (zone == null) { - if (name.startsWith("GMT") && name.length() > 3) { - char sign = name.charAt(3); - if (sign == '+' || sign == '-') { - int[] position = new int[1]; - String formattedName = formatTimeZoneName(name, 4); - int hour = parseNumber(formattedName, 4, position); - if (hour < 0 || hour > 23) { - return (TimeZone) GMT.clone(); - } - int index = position[0]; - if (index != -1) { - int raw = hour * 3600000; - if (index < formattedName.length() && formattedName.charAt(index) == ':') { - int minute = parseNumber(formattedName, index + 1, position); - if (position[0] == -1 || minute < 0 || minute > 59) { - return (TimeZone) GMT.clone(); - } - raw += minute * 60000; - } else if (hour >= 30 || index > 6) { - raw = (hour / 100 * 3600000) + (hour % 100 * 60000); - } - if (sign == '-') { - raw = -raw; - } - return new SimpleTimeZone(raw, formattedName); - } - } - } - zone = GMT; - } - return (TimeZone) zone.clone(); - } - - private static String formatTimeZoneName(String name, int offset) { - StringBuilder buf = new StringBuilder(); - int index = offset, length = name.length(); - buf.append(name.substring(0, offset)); - - while (index < length) { - if (Character.digit(name.charAt(index), 10) != -1) { - buf.append(name.charAt(index)); - if ((length - (index + 1)) == 2) { - buf.append(':'); - } - } else if (name.charAt(index) == ':') { - buf.append(':'); - } - index++; - } - - if (buf.toString().indexOf(":") == -1) { - buf.append(':'); - buf.append("00"); - } - - if (buf.toString().indexOf(":") == 5) { - buf.insert(4, '0'); - } - - return buf.toString(); - } - - public boolean hasSameRules(TimeZone zone) { - if (zone == null) { - return false; - } - return getRawOffset() == zone.getRawOffset(); - } - - abstract public boolean inDaylightTime(Date time); - - private static int parseNumber(String string, int offset, int[] position) { - int index = offset, length = string.length(), digit, result = 0; - while (index < length && (digit = Character.digit(string.charAt(index), 10)) != -1) { - index++; - result = result * 10 + digit; - } - position[0] = index == offset ? -1 : index; - return result; - } - - public static synchronized void setDefault(TimeZone timezone) { - if (timezone != null) { - setICUDefaultTimeZone(timezone); - Default = timezone; - return; - } - - String zone = AccessController.doPrivileged(new PriviAction("user.timezone")); - - // sometimes DRLVM incorrectly adds "\n" to the end of timezone ID - if (zone != null && zone.contains("\n")) { - zone = zone.substring(0, zone.indexOf("\n")); - } - - // if property user.timezone is not set, we call the native method - // getCustomTimeZone - if (zone == null || zone.length() == 0) { - int[] tzinfo = new int[10]; - boolean[] isCustomTimeZone = new boolean[1]; - - String zoneId = getCustomTimeZone(tzinfo, isCustomTimeZone); - - // if returned TimeZone is a user customized TimeZone - if (isCustomTimeZone[0]) { - // build a new SimpleTimeZone - switch (tzinfo[1]) { - case 0: - // does not observe DST - Default = new SimpleTimeZone(tzinfo[0], zoneId); - break; - default: - // observes DST - Default = new SimpleTimeZone(tzinfo[0], zoneId, tzinfo[5], tzinfo[4], tzinfo[3], tzinfo[2], - tzinfo[9], tzinfo[8], tzinfo[7], tzinfo[6], tzinfo[1]); - } - } else { - // get TimeZone - Default = getTimeZone(zoneId); - } - } else { - // if property user.timezone is set in command line (with -D option) - Default = getTimeZone(zone); - } - setICUDefaultTimeZone(Default); - } - - private static void setICUDefaultTimeZone(TimeZone timezone) { - final com.ibm.icu.util.TimeZone icuTZ = com.ibm.icu.util.TimeZone.getTimeZone(timezone.getID()); - } - - public void setID(String name) { - if (name == null) { - throw new NullPointerException(); - } - ID = name; - } - - abstract public void setRawOffset(int offset); - - abstract public boolean useDaylightTime(); - - private static native String getCustomTimeZone(int[] tzinfo, boolean[] isCustomTimeZone); -} diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TimeZones.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TimeZones.java deleted file mode 100644 index f9e70f561..000000000 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TimeZones.java +++ /dev/null @@ -1,707 +0,0 @@ -/* - * Copyright 2014 Alexey Andreev. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.teavm.classlib.java.util; - -final class TimeZones { - - private static final int HALF_HOUR = 1800000; - private static final int ONE_HOUR = HALF_HOUR * 2; - - public static TimeZone[] getTimeZones() { - return new TimeZone[] { - new SimpleTimeZone(-11 * ONE_HOUR, "MIT"), //$NON-NLS-1$ - new SimpleTimeZone(-10 * ONE_HOUR, "HST"), //$NON-NLS-1$ - new SimpleTimeZone(-9 * ONE_HOUR, "AST", Calendar.APRIL, 1, //$NON-NLS-1$ - -Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-8 * ONE_HOUR, "PST", Calendar.APRIL, 1, //$NON-NLS-1$ - -Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-7 * ONE_HOUR, "MST", Calendar.APRIL, 1, //$NON-NLS-1$ - -Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-7 * ONE_HOUR, "PNT"), //$NON-NLS-1$ - new SimpleTimeZone(-6 * ONE_HOUR, "CST", Calendar.APRIL, 1, //$NON-NLS-1$ - -Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-5 * ONE_HOUR, "EST", Calendar.APRIL, 1, //$NON-NLS-1$ - -Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-5 * ONE_HOUR, "IET"), //$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "PRT"), //$NON-NLS-1$ - new SimpleTimeZone(-3 * ONE_HOUR - 1800000, - "CNT", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 60000, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000), - new SimpleTimeZone(-3 * ONE_HOUR, "AGT"), //$NON-NLS-1$ - new SimpleTimeZone(-3 * ONE_HOUR, "BET", Calendar.OCTOBER, 8, //$NON-NLS-1$ - -Calendar.SUNDAY, 0 * ONE_HOUR, Calendar.FEBRUARY, 15, - -Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(0 * ONE_HOUR, "UTC"), //$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "WET", Calendar.MARCH, -1, //$NON-NLS-1$ - Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, "ECT", Calendar.MARCH, -1, //$NON-NLS-1$ - Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, "MET", Calendar.MARCH, 21, 0, //$NON-NLS-1$ - 0 * ONE_HOUR, Calendar.SEPTEMBER, 23, 0, 0 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "ART", Calendar.APRIL, -1, //$NON-NLS-1$ - Calendar.FRIDAY, 0 * ONE_HOUR, Calendar.SEPTEMBER, -1, - Calendar.THURSDAY, 23 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "CAT"), //$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "EET", Calendar.MARCH, -1, //$NON-NLS-1$ - Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(3 * ONE_HOUR, "EAT"), //$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR + 1800000, - "Asia/Tehran", //$NON-NLS-1$ - Calendar.MARCH, 21, 0, 0 * ONE_HOUR, - Calendar.SEPTEMBER, 23, 0, 0 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR, "NET", Calendar.MARCH, -1, //$NON-NLS-1$ - Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(5 * ONE_HOUR, "PLT"), //$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR + 1800000, "IST"), //$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, "BST"), //$NON-NLS-1$ - new SimpleTimeZone(7 * ONE_HOUR, "VST"), //$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "CTT"), //$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR, "JST"), //$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR + 1800000, "ACT"), //$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR, "AET", Calendar.OCTOBER, -1, //$NON-NLS-1$ - Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.MARCH, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(11 * ONE_HOUR, "SST"), //$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, "NST", Calendar.OCTOBER, 1, //$NON-NLS-1$ - -Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.MARCH, 15, - -Calendar.SUNDAY, 2 * ONE_HOUR), - - new SimpleTimeZone(-6 * ONE_HOUR, "America/Costa_Rica"), //$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, - "America/Halifax", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-2 * ONE_HOUR, "Atlantic/South_Georgia"), //$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, - "Europe/London", //$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Algiers"), //$NON-NLS-1$ - new SimpleTimeZone( - 2 * ONE_HOUR, - "Africa/Cairo", //$NON-NLS-1$ - Calendar.APRIL, -1, Calendar.FRIDAY, 0 * ONE_HOUR, - Calendar.SEPTEMBER, -1, Calendar.THURSDAY, - 23 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Harare"), //$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, - "Asia/Jerusalem", //$NON-NLS-1$ - Calendar.APRIL, 9, 0, 1 * ONE_HOUR, Calendar.SEPTEMBER, - 24, 0, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Bucharest", //$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(3 * ONE_HOUR, - "Europe/Moscow", //$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR + 1800000, "Asia/Kabul"), //$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR + 1800000, - "Australia/Adelaide", Calendar.OCTOBER, -1, //$NON-NLS-1$ - Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.MARCH, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(10 * ONE_HOUR, "Australia/Brisbane"), //$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR, - "Australia/Hobart", //$NON-NLS-1$ - Calendar.OCTOBER, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - - new SimpleTimeZone(-9 * ONE_HOUR - 1800000, "Pacific/Marquesas"), //$NON-NLS-1$ - new SimpleTimeZone(-1 * ONE_HOUR, - "Atlantic/Azores", //$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR, "Asia/Dubai"), //$NON-NLS-1$ - new SimpleTimeZone(20700000, "Asia/Katmandu"), //$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR + 1800000, "Asia/Rangoon"), //$NON-NLS-1$ - new SimpleTimeZone(45900000, - "Pacific/Chatham", //$NON-NLS-1$ - Calendar.OCTOBER, 1, -Calendar.SUNDAY, 9900000, - Calendar.MARCH, 15, -Calendar.SUNDAY, 9900000), - - new SimpleTimeZone(-11 * ONE_HOUR, "Pacific/Apia"), //$NON-NLS-1$ - new SimpleTimeZone(-11 * ONE_HOUR, "Pacific/Niue"), //$NON-NLS-1$ - new SimpleTimeZone(-11 * ONE_HOUR, "Pacific/Pago_Pago"), //$NON-NLS-1$ - new SimpleTimeZone(-10 * ONE_HOUR, - "America/Adak", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-10 * ONE_HOUR, "Pacific/Fakaofo"), //$NON-NLS-1$ - new SimpleTimeZone(-10 * ONE_HOUR, "Pacific/Honolulu"), //$NON-NLS-1$ - new SimpleTimeZone(-10 * ONE_HOUR, "Pacific/Rarotonga"), //$NON-NLS-1$ - new SimpleTimeZone(-10 * ONE_HOUR, "Pacific/Tahiti"), //$NON-NLS-1$ - new SimpleTimeZone(-9 * ONE_HOUR, - "America/Anchorage", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-9 * ONE_HOUR, "Pacific/Gambier"), //$NON-NLS-1$ - new SimpleTimeZone(-8 * ONE_HOUR, - "America/Los_Angeles", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-8 * ONE_HOUR, - "America/Tijuana", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-8 * ONE_HOUR, - "America/Vancouver", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-8 * ONE_HOUR, "Pacific/Pitcairn"), //$NON-NLS-1$ - new SimpleTimeZone(-7 * ONE_HOUR, "America/Dawson_Creek"), //$NON-NLS-1$ - new SimpleTimeZone(-7 * ONE_HOUR, - "America/Denver", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-7 * ONE_HOUR, - "America/Edmonton", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-7 * ONE_HOUR, - "America/Mazatlan", //$NON-NLS-1$ - Calendar.MAY, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.SEPTEMBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-7 * ONE_HOUR, "America/Phoenix"), //$NON-NLS-1$ - new SimpleTimeZone(-6 * ONE_HOUR, "America/Belize"), //$NON-NLS-1$ - new SimpleTimeZone(-6 * ONE_HOUR, - "America/Chicago", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-6 * ONE_HOUR, "America/El_Salvador"), //$NON-NLS-1$ - new SimpleTimeZone(-6 * ONE_HOUR, "America/Managua"), //$NON-NLS-1$ - new SimpleTimeZone(-6 * ONE_HOUR, - "America/Mexico_City", //$NON-NLS-1$ - Calendar.MAY, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.SEPTEMBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-6 * ONE_HOUR, "America/Regina"), //$NON-NLS-1$ - new SimpleTimeZone(-6 * ONE_HOUR, "America/Tegucigalpa"), //$NON-NLS-1$ - new SimpleTimeZone(-6 * ONE_HOUR, - "America/Winnipeg", //$NON-NLS-1$ //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-6 * ONE_HOUR, - "Pacific/Easter", //$NON-NLS-1$ - Calendar.OCTOBER, 9, -Calendar.SUNDAY, 4 * ONE_HOUR, - Calendar.MARCH, 9, -Calendar.SUNDAY, 3 * ONE_HOUR), - new SimpleTimeZone(-6 * ONE_HOUR, "Pacific/Galapagos"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, "America/Bogota"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, "America/Cayman"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, - "America/Grand_Turk",//$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 0 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(-5 * ONE_HOUR, "America/Guayaquil"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, - "America/Havana", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 0 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(-5 * ONE_HOUR, "America/Indianapolis"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, "America/Jamaica"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, "America/Lima"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, - "America/Montreal", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-5 * ONE_HOUR, - "America/Nassau", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-5 * ONE_HOUR, - "America/New_York", //$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-5 * ONE_HOUR, "America/Panama"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, "America/Port-au-Prince"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, "America/Porto_Acre"), //$NON-NLS-1$ - new SimpleTimeZone(-5 * ONE_HOUR, "America/Rio_Branco"), //$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Anguilla"), //$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Antigua"), //$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Aruba"), //$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, - "America/Asuncion", //$NON-NLS-1$ - Calendar.OCTOBER, 1, -Calendar.SUNDAY, 0 * ONE_HOUR, - Calendar.MARCH, 1, -Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(-4 * ONE_HOUR, "America/Barbados"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Caracas"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, - "America/Cuiaba",//$NON-NLS-1$ - Calendar.OCTOBER, 8, -Calendar.SUNDAY, 0 * ONE_HOUR, - Calendar.FEBRUARY, 15, -Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(-4 * ONE_HOUR, "America/Curacao"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Dominica"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Grenada"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Guadeloupe"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Guyana"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/La_Paz"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Manaus"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Martinique"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Montserrat"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Port_of_Spain"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/Puerto_Rico"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, - "America/Santiago",//$NON-NLS-1$ - Calendar.OCTOBER, 9, -Calendar.SUNDAY, 4 * ONE_HOUR, - Calendar.MARCH, 9, -Calendar.SUNDAY, 3 * ONE_HOUR), - new SimpleTimeZone(-4 * ONE_HOUR, "America/Santo_Domingo"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/St_Kitts"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/St_Lucia"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/St_Thomas"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, "America/St_Vincent"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, - "America/Thule",//$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-4 * ONE_HOUR, "America/Tortola"),//$NON-NLS-1$ - new SimpleTimeZone(-4 * ONE_HOUR, - "Antarctica/Palmer",//$NON-NLS-1$ - Calendar.OCTOBER, 9, -Calendar.SUNDAY, 0 * ONE_HOUR, - Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(-4 * ONE_HOUR, - "Atlantic/Bermuda",//$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-4 * ONE_HOUR, - "Atlantic/Stanley",//$NON-NLS-1$ - Calendar.SEPTEMBER, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.APRIL, 15, -Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-3 * ONE_HOUR - 1800000, - "America/St_Johns",//$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 60000, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000), - new SimpleTimeZone(-3 * ONE_HOUR, "America/Buenos_Aires"),//$NON-NLS-1$ - new SimpleTimeZone(-3 * ONE_HOUR, "America/Cayenne"),//$NON-NLS-1$ - new SimpleTimeZone(-3 * ONE_HOUR, "America/Fortaleza"),//$NON-NLS-1$ - new SimpleTimeZone(-3 * ONE_HOUR, - "America/Godthab",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(-3 * ONE_HOUR, - "America/Miquelon",//$NON-NLS-1$ - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(-3 * ONE_HOUR, "America/Montevideo"),//$NON-NLS-1$ - new SimpleTimeZone(-3 * ONE_HOUR, "America/Paramaribo"),//$NON-NLS-1$ - new SimpleTimeZone(-3 * ONE_HOUR, - "America/Sao_Paulo",//$NON-NLS-1$ - Calendar.OCTOBER, 8, -Calendar.SUNDAY, 0 * ONE_HOUR, - Calendar.FEBRUARY, 15, -Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(-2 * ONE_HOUR, "America/Noronha"),//$NON-NLS-1$ - new SimpleTimeZone(-1 * ONE_HOUR, - "America/Scoresbysund",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(-1 * ONE_HOUR, "Atlantic/Cape_Verde"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Abidjan"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Accra"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Banjul"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Bissau"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Casablanca"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Conakry"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Dakar"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Freetown"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Lome"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Monrovia"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Nouakchott"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Ouagadougou"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Sao_Tome"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Africa/Timbuktu"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, - "Atlantic/Canary",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(0 * ONE_HOUR, - "Atlantic/Faeroe",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(0 * ONE_HOUR, "Atlantic/Reykjavik"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, "Atlantic/St_Helena"),//$NON-NLS-1$ - new SimpleTimeZone(0 * ONE_HOUR, - "Europe/Dublin",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(0 * ONE_HOUR, - "Europe/Lisbon",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Bangui"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Douala"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Kinshasa"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Lagos"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Libreville"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Luanda"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Malabo"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Ndjamena"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Niamey"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Porto-Novo"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, "Africa/Tunis"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, - "Africa/Windhoek",//$NON-NLS-1$ - Calendar.SEPTEMBER, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.APRIL, 1, -Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, "Atlantic/Jan_Mayen"),//$NON-NLS-1$ - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Amsterdam",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Andorra",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Belgrade",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Berlin",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Brussels",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Budapest",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Copenhagen",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Gibraltar",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Luxembourg",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Madrid",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Malta",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Monaco",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, "Europe/Oslo", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Paris",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Prague",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, "Europe/Rome", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Stockholm",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Tirane",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Vaduz",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Vienna",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Warsaw",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(1 * ONE_HOUR, - "Europe/Zurich",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Blantyre"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Bujumbura"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Gaborone"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Johannesburg"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Kigali"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Lubumbashi"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Lusaka"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Maputo"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Maseru"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Mbabane"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Africa/Tripoli"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Asia/Amman", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.THURSDAY, 0 * ONE_HOUR, - Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 0 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "Asia/Beirut", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 0 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Asia/Damascus",//$NON-NLS-1$ - Calendar.APRIL, 1, 0, 0 * ONE_HOUR, Calendar.OCTOBER, - 1, 0, 0 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Asia/Nicosia",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Athens",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Chisinau",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Helsinki",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Istanbul",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Kaliningrad",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "Europe/Kiev", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Minsk",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "Europe/Riga", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Simferopol",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, - "Europe/Sofia",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 1 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(2 * ONE_HOUR, "Europe/Tallinn"),//$NON-NLS-1$ - new SimpleTimeZone(2 * ONE_HOUR, "Europe/Vilnius"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Addis_Ababa"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Asmera"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Dar_es_Salaam"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Djibouti"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Kampala"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Khartoum"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Mogadishu"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Africa/Nairobi"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Asia/Aden"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, - "Asia/Baghdad",//$NON-NLS-1$ - Calendar.APRIL, 1, 0, 3 * ONE_HOUR, Calendar.OCTOBER, - 1, 0, 3 * ONE_HOUR), - new SimpleTimeZone(3 * ONE_HOUR, "Asia/Bahrain"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Asia/Kuwait"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Asia/Qatar"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Asia/Riyadh"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Indian/Antananarivo"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Indian/Comoro"),//$NON-NLS-1$ - new SimpleTimeZone(3 * ONE_HOUR, "Indian/Mayotte"),//$NON-NLS-1$ - new SimpleTimeZone(4 * ONE_HOUR, "Asia/Aqtau", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 0 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR, "Asia/Baku", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 1 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 1 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR, "Asia/Muscat"),//$NON-NLS-1$ - new SimpleTimeZone(4 * ONE_HOUR, - "Asia/Tbilisi",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 0 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR, - "Asia/Yerevan",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR, - "Europe/Samara",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(4 * ONE_HOUR, "Indian/Mahe"),//$NON-NLS-1$ - new SimpleTimeZone(4 * ONE_HOUR, "Indian/Mauritius"),//$NON-NLS-1$ - new SimpleTimeZone(4 * ONE_HOUR, "Indian/Reunion"),//$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR, "Asia/Aqtobe", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 0 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(5 * ONE_HOUR, "Asia/Ashgabat"),//$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR, "Asia/Ashkhabad"),//$NON-NLS-1$ - new SimpleTimeZone( - 5 * ONE_HOUR, - "Asia/Bishkek",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, - 2 * ONE_HOUR + 1800000, Calendar.OCTOBER, -1, - Calendar.SUNDAY, 2 * ONE_HOUR + 1800000), - new SimpleTimeZone(5 * ONE_HOUR, "Asia/Dushanbe"),//$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR, "Asia/Karachi"),//$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR, "Asia/Tashkent"),//$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR, - "Asia/Yekaterinburg",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(5 * ONE_HOUR, "Indian/Kerguelen"),//$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR, "Indian/Maldives"),//$NON-NLS-1$ - new SimpleTimeZone(5 * ONE_HOUR + 1800000, "Asia/Calcutta"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, "Antarctica/Mawson"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, "Asia/Almaty", Calendar.MARCH,//$NON-NLS-1$ - -1, Calendar.SUNDAY, 0 * ONE_HOUR, Calendar.OCTOBER, - -1, Calendar.SUNDAY, 0 * ONE_HOUR), - new SimpleTimeZone(5 * ONE_HOUR + HALF_HOUR, "Asia/Colombo"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, "Asia/Dacca"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, "Asia/Dhaka"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, - "Asia/Novosibirsk",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(6 * ONE_HOUR, "Asia/Thimbu"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, "Asia/Thimphu"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR, "Indian/Chagos"),//$NON-NLS-1$ - new SimpleTimeZone(6 * ONE_HOUR + 1800000, "Indian/Cocos"),//$NON-NLS-1$ - new SimpleTimeZone(7 * ONE_HOUR, "Asia/Bangkok"),//$NON-NLS-1$ - new SimpleTimeZone(7 * ONE_HOUR, "Asia/Jakarta"),//$NON-NLS-1$ - new SimpleTimeZone(7 * ONE_HOUR, - "Asia/Krasnoyarsk",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(7 * ONE_HOUR, "Asia/Phnom_Penh"),//$NON-NLS-1$ - new SimpleTimeZone(7 * ONE_HOUR, "Asia/Saigon"),//$NON-NLS-1$ - new SimpleTimeZone(7 * ONE_HOUR, "Asia/Vientiane"),//$NON-NLS-1$ - new SimpleTimeZone(7 * ONE_HOUR, "Indian/Christmas"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Antarctica/Casey"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Brunei"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Hong_Kong"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, - "Asia/Irkutsk",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Kuala_Lumpur"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Macao"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Manila"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Shanghai"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Singapore"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Taipei"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Ujung_Pandang"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Ulaanbaatar"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Asia/Ulan_Bator"),//$NON-NLS-1$ - new SimpleTimeZone(8 * ONE_HOUR, "Australia/Perth"),//$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR, "Asia/Jayapura"),//$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR, "Asia/Pyongyang"),//$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR, "Asia/Seoul"),//$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR, "Asia/Tokyo"),//$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR, - "Asia/Yakutsk",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR),//$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR, "Pacific/Palau"),//$NON-NLS-1$ - new SimpleTimeZone(9 * ONE_HOUR + 1800000, - "Australia/Broken_Hill", Calendar.OCTOBER, -1,//$NON-NLS-1$ - Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.MARCH, -1, - Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(9 * ONE_HOUR + 1800000, "Australia/Darwin"),//$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR, "Antarctica/DumontDUrville"),//$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR, - "Asia/Vladivostok",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(10 * ONE_HOUR, - "Australia/Sydney",//$NON-NLS-1$ - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(10 * ONE_HOUR, "Pacific/Guam"),//$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR, "Pacific/Port_Moresby"),//$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR, "Pacific/Saipan"),//$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR, "Pacific/Truk"),//$NON-NLS-1$ - new SimpleTimeZone(10 * ONE_HOUR + 1800000, - "Australia/Lord_Howe", Calendar.OCTOBER, -1,//$NON-NLS-1$ - Calendar.SUNDAY, 2 * ONE_HOUR, Calendar.MARCH, -1, - Calendar.SUNDAY, 2 * ONE_HOUR, 1800000), - new SimpleTimeZone(11 * ONE_HOUR, - "Asia/Magadan",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(11 * ONE_HOUR, "Pacific/Efate"),//$NON-NLS-1$ - new SimpleTimeZone(11 * ONE_HOUR, "Pacific/Guadalcanal"),//$NON-NLS-1$ - new SimpleTimeZone(11 * ONE_HOUR, "Pacific/Kosrae"),//$NON-NLS-1$ - new SimpleTimeZone(11 * ONE_HOUR, "Pacific/Noumea"),//$NON-NLS-1$ - new SimpleTimeZone(11 * ONE_HOUR, "Pacific/Ponape"),//$NON-NLS-1$ - new SimpleTimeZone(11 * ONE_HOUR + 1800000, "Pacific/Norfolk"),//$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, - "Antarctica/McMurdo",//$NON-NLS-1$ - Calendar.OCTOBER, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.MARCH, 15, -Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(12 * ONE_HOUR, - "Asia/Anadyr",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(12 * ONE_HOUR, - "Asia/Kamchatka",//$NON-NLS-1$ - Calendar.MARCH, -1, Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(12 * ONE_HOUR, - "Pacific/Auckland",//$NON-NLS-1$ - Calendar.OCTOBER, 1, -Calendar.SUNDAY, 2 * ONE_HOUR, - Calendar.MARCH, 15, -Calendar.SUNDAY, 2 * ONE_HOUR), - new SimpleTimeZone(12 * ONE_HOUR, "Pacific/Fiji"),//$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, "Pacific/Funafuti"),//$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, "Pacific/Majuro"),//$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, "Pacific/Nauru"),//$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, "Pacific/Tarawa"),//$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, "Pacific/Wake"),//$NON-NLS-1$ - new SimpleTimeZone(12 * ONE_HOUR, "Pacific/Wallis"),//$NON-NLS-1$ - new SimpleTimeZone(13 * ONE_HOUR, "Pacific/Enderbury"),//$NON-NLS-1$ - new SimpleTimeZone(13 * ONE_HOUR, "Pacific/Tongatapu"),//$NON-NLS-1$ - new SimpleTimeZone(14 * ONE_HOUR, "Pacific/Kiritimati"), };//$NON-NLS-1$ - } -}