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 51a587807..9ff267fed 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,36 +32,19 @@ package org.teavm.classlib.java.util; +import org.teavm.classlib.java.io.TSerializable; +import org.teavm.classlib.java.lang.TCloneable; +import org.teavm.classlib.java.lang.TComparable; + public abstract class Calendar implements TSerializable, TCloneable, TComparable { - - private static final long serialVersionUID = -1807547505821590642L; - - /** - * Set to {@code true} when the calendar fields have been set from the time, set to - * {@code false} when a field is changed and the fields must be recomputed. - */ protected boolean areFieldsSet; - /** - * An integer array of calendar fields. The length is {@code FIELD_COUNT}. - */ protected int[] fields; - /** - * A boolean array. Each element indicates if the corresponding field has - * been set. The length is {@code FIELD_COUNT}. - */ protected boolean[] isSet; - /** - * Set to {@code true} when the time has been set, set to {@code false} when a field is - * changed and the time must be recomputed. - */ protected boolean isTimeSet; - /** - * The time in milliseconds since January 1, 1970. - */ protected long time; transient int lastTimeFieldSet; @@ -76,344 +59,95 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable private TimeZone zone; - /** - * Value of the {@code MONTH} field indicating the first month of the - * year. - */ public static final int JANUARY = 0; - /** - * Value of the {@code MONTH} field indicating the second month of - * the year. - */ public static final int FEBRUARY = 1; - /** - * Value of the {@code MONTH} field indicating the third month of the - * year. - */ public static final int MARCH = 2; - /** - * Value of the {@code MONTH} field indicating the fourth month of - * the year. - */ public static final int APRIL = 3; - /** - * Value of the {@code MONTH} field indicating the fifth month of the - * year. - */ public static final int MAY = 4; - /** - * Value of the {@code MONTH} field indicating the sixth month of the - * year. - */ public static final int JUNE = 5; - /** - * Value of the {@code MONTH} field indicating the seventh month of - * the year. - */ public static final int JULY = 6; - /** - * Value of the {@code MONTH} field indicating the eighth month of - * the year. - */ public static final int AUGUST = 7; - /** - * Value of the {@code MONTH} field indicating the ninth month of the - * year. - */ public static final int SEPTEMBER = 8; - /** - * Value of the {@code MONTH} field indicating the tenth month of the - * year. - */ public static final int OCTOBER = 9; - /** - * Value of the {@code MONTH} field indicating the eleventh month of - * the year. - */ public static final int NOVEMBER = 10; - /** - * Value of the {@code MONTH} field indicating the twelfth month of - * the year. - */ public static final int DECEMBER = 11; - /** - * Value of the {@code MONTH} field indicating the thirteenth month - * of the year. Although {@code GregorianCalendar} does not use this - * value, lunar calendars do. - */ public static final int UNDECIMBER = 12; - /** - * Value of the {@code DAY_OF_WEEK} field indicating Sunday. - */ public static final int SUNDAY = 1; - /** - * Value of the {@code DAY_OF_WEEK} field indicating Monday. - */ public static final int MONDAY = 2; - /** - * Value of the {@code DAY_OF_WEEK} field indicating Tuesday. - */ public static final int TUESDAY = 3; - /** - * Value of the {@code DAY_OF_WEEK} field indicating Wednesday. - */ public static final int WEDNESDAY = 4; - /** - * Value of the {@code DAY_OF_WEEK} field indicating Thursday. - */ public static final int THURSDAY = 5; - /** - * Value of the {@code DAY_OF_WEEK} field indicating Friday. - */ public static final int FRIDAY = 6; - /** - * Value of the {@code DAY_OF_WEEK} field indicating Saturday. - */ public static final int SATURDAY = 7; - /** - * Field number for {@code get} and {@code set} indicating the - * era, e.g., AD or BC in the Julian calendar. This is a calendar-specific - * value; see subclass documentation. - * - * @see GregorianCalendar#AD - * @see GregorianCalendar#BC - */ public static final int ERA = 0; - /** - * Field number for {@code get} and {@code set} indicating the - * year. This is a calendar-specific value; see subclass documentation. - */ public static final int YEAR = 1; - /** - * Field number for {@code get} and {@code set} indicating the - * month. This is a calendar-specific value. The first month of the year is - * {@code JANUARY}; the last depends on the number of months in a - * year. - * - * @see #JANUARY - * @see #FEBRUARY - * @see #MARCH - * @see #APRIL - * @see #MAY - * @see #JUNE - * @see #JULY - * @see #AUGUST - * @see #SEPTEMBER - * @see #OCTOBER - * @see #NOVEMBER - * @see #DECEMBER - * @see #UNDECIMBER - */ public static final int MONTH = 2; - /** - * Field number for {@code get} and {@code set} indicating the - * week number within the current year. The first week of the year, as - * defined by {@code getFirstDayOfWeek()} and - * {@code getMinimalDaysInFirstWeek()}, has value 1. Subclasses - * define the value of {@code WEEK_OF_YEAR} for days before the first - * week of the year. - * - * @see #getFirstDayOfWeek - * @see #getMinimalDaysInFirstWeek - */ public static final int WEEK_OF_YEAR = 3; - /** - * Field number for {@code get} and {@code set} indicating the - * week number within the current month. The first week of the month, as - * defined by {@code getFirstDayOfWeek()} and - * {@code getMinimalDaysInFirstWeek()}, has value 1. Subclasses - * define the value of {@code WEEK_OF_MONTH} for days before the - * first week of the month. - * - * @see #getFirstDayOfWeek - * @see #getMinimalDaysInFirstWeek - */ public static final int WEEK_OF_MONTH = 4; - /** - * Field number for {@code get} and {@code set} indicating the - * day of the month. This is a synonym for {@code DAY_OF_MONTH}. The - * first day of the month has value 1. - * - * @see #DAY_OF_MONTH - */ public static final int DATE = 5; - /** - * Field number for {@code get} and {@code set} indicating the - * day of the month. This is a synonym for {@code DATE}. The first - * day of the month has value 1. - * - * @see #DATE - */ public static final int DAY_OF_MONTH = 5; - /** - * Field number for {@code get} and {@code set} indicating the - * day number within the current year. The first day of the year has value - * 1. - */ public static final int DAY_OF_YEAR = 6; - /** - * Field number for {@code get} and {@code set} indicating the - * day of the week. This field takes values {@code SUNDAY}, - * {@code MONDAY}, {@code TUESDAY}, {@code WEDNESDAY}, - * {@code THURSDAY}, {@code FRIDAY}, and - * {@code SATURDAY}. - * - * @see #SUNDAY - * @see #MONDAY - * @see #TUESDAY - * @see #WEDNESDAY - * @see #THURSDAY - * @see #FRIDAY - * @see #SATURDAY - */ public static final int DAY_OF_WEEK = 7; - /** - * Field number for {@code get} and {@code set} indicating the - * ordinal number of the day of the week within the current month. Together - * with the {@code DAY_OF_WEEK} field, this uniquely specifies a day - * within a month. Unlike {@code WEEK_OF_MONTH} and - * {@code WEEK_OF_YEAR}, this field's value does not - * depend on {@code getFirstDayOfWeek()} or - * {@code getMinimalDaysInFirstWeek()}. {@code DAY_OF_MONTH 1} - * through {@code 7} always correspond to DAY_OF_WEEK_IN_MONTH - * 1; - * {@code 8} through {@code 15} correspond to - * {@code DAY_OF_WEEK_IN_MONTH 2}, and so on. - * {@code DAY_OF_WEEK_IN_MONTH 0} indicates the week before - * {@code DAY_OF_WEEK_IN_MONTH 1}. Negative values count back from - * the end of the month, so the last Sunday of a month is specified as - * {@code DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1}. Because - * negative values count backward they will usually be aligned differently - * within the month than positive values. For example, if a month has 31 - * days, {@code DAY_OF_WEEK_IN_MONTH -1} will overlap - * {@code DAY_OF_WEEK_IN_MONTH 5} and the end of {@code 4}. - * - * @see #DAY_OF_WEEK - * @see #WEEK_OF_MONTH - */ public static final int DAY_OF_WEEK_IN_MONTH = 8; - /** - * Field number for {@code get} and {@code set} indicating - * whether the {@code HOUR} is before or after noon. E.g., at - * 10:04:15.250 PM the {@code AM_PM} is {@code PM}. - * - * @see #AM - * @see #PM - * @see #HOUR - */ public static final int AM_PM = 9; - /** - * Field number for {@code get} and {@code set} indicating the - * hour of the morning or afternoon. {@code HOUR} is used for the - * 12-hour clock. E.g., at 10:04:15.250 PM the {@code HOUR} is 10. - * - * @see #AM_PM - * @see #HOUR_OF_DAY - */ public static final int HOUR = 10; - /** - * Field number for {@code get} and {@code set} indicating the - * hour of the day. {@code HOUR_OF_DAY} is used for the 24-hour - * clock. E.g., at 10:04:15.250 PM the {@code HOUR_OF_DAY} is 22. - * - * @see #HOUR - */ public static final int HOUR_OF_DAY = 11; - /** - * Field number for {@code get} and {@code set} indicating the - * minute within the hour. E.g., at 10:04:15.250 PM the {@code MINUTE} - * is 4. - */ public static final int MINUTE = 12; - /** - * Field number for {@code get} and {@code set} indicating the - * second within the minute. E.g., at 10:04:15.250 PM the - * {@code SECOND} is 15. - */ public static final int SECOND = 13; - /** - * Field number for {@code get} and {@code set} indicating the - * millisecond within the second. E.g., at 10:04:15.250 PM the - * {@code MILLISECOND} is 250. - */ public static final int MILLISECOND = 14; - /** - * Field number for {@code get} and {@code set} indicating the - * raw offset from GMT in milliseconds. - */ public static final int ZONE_OFFSET = 15; - /** - * Field number for {@code get} and {@code set} indicating the - * daylight savings offset in milliseconds. - */ public static final int DST_OFFSET = 16; - /** - * This is the total number of fields in this calendar. - */ public static final int FIELD_COUNT = 17; - /** - * Value of the {@code AM_PM} field indicating the period of the day - * from midnight to just before noon. - */ public static final int AM = 0; - /** - * Value of the {@code AM_PM} field indicating the period of the day - * from noon to just before midnight. - */ public static final int PM = 1; @SuppressWarnings("nls") - private static String[] fieldNames = { "ERA=", "YEAR=", "MONTH=", - "WEEK_OF_YEAR=", "WEEK_OF_MONTH=", "DAY_OF_MONTH=", "DAY_OF_YEAR=", - "DAY_OF_WEEK=", "DAY_OF_WEEK_IN_MONTH=", "AM_PM=", "HOUR=", - "HOUR_OF_DAY", "MINUTE=", "SECOND=", "MILLISECOND=", - "ZONE_OFFSET=", "DST_OFFSET=" }; + private static String[] fieldNames = { "ERA=", "YEAR=", "MONTH=", "WEEK_OF_YEAR=", "WEEK_OF_MONTH=", + "DAY_OF_MONTH=", "DAY_OF_YEAR=", "DAY_OF_WEEK=", "DAY_OF_WEEK_IN_MONTH=", "AM_PM=", "HOUR=", "HOUR_OF_DAY", + "MINUTE=", "SECOND=", "MILLISECOND=", "ZONE_OFFSET=", "DST_OFFSET=" }; - /** - * Constructs a {@code Calendar} instance using the default {@code TimeZone} and {@code Locale}. - */ protected Calendar() { - this(TimeZone.getDefault(), Locale.getDefault()); + this(TimeZone.getDefault(), TLocale.getDefault()); } Calendar(TimeZone timezone) { @@ -424,49 +158,16 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable setTimeZone(timezone); } - /** - * Constructs a {@code Calendar} instance using the specified {@code TimeZone} and {@code Locale}. - * - * @param timezone - * the timezone. - * @param locale - * the locale. - */ - protected Calendar(TimeZone timezone, Locale locale) { + 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); + 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()); } - - /** - * 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 {@code field} is {@code DST_OFFSET} or {@code - * ZONE_OFFSET}. - */ abstract public void add(int field, int value); - /** - * Returns whether the {@code Date} specified by this {@code Calendar} instance is after the {@code Date} - * specified by the parameter. The comparison is not dependent on the time - * zones of the {@code Calendar}. - * - * @param calendar - * the {@code Calendar} instance to compare. - * @return {@code true} when this Calendar is after calendar, {@code false} otherwise. - * @throws IllegalArgumentException - * if the time is not set and the time cannot be computed - * from the current field values. - */ public boolean after(Object calendar) { if (!(calendar instanceof Calendar)) { return false; @@ -474,18 +175,6 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return getTimeInMillis() > ((Calendar) calendar).getTimeInMillis(); } - /** - * Returns whether the {@code Date} specified by this {@code Calendar} instance is before the - * {@code Date} specified by the parameter. The comparison is not dependent on the - * time zones of the {@code Calendar}. - * - * @param calendar - * the {@code Calendar} instance to compare. - * @return {@code true} when this Calendar is before calendar, {@code false} otherwise. - * @throws IllegalArgumentException - * if the time is not set and the time cannot be computed - * from the current field values. - */ public boolean before(Object calendar) { if (!(calendar instanceof Calendar)) { return false; @@ -493,10 +182,6 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return getTimeInMillis() < ((Calendar) calendar).getTimeInMillis(); } - /** - * Clears all of the fields of this {@code Calendar}. All fields are initialized to - * zero. - */ public final void clear() { for (int i = 0; i < FIELD_COUNT; i++) { fields[i] = 0; @@ -505,25 +190,12 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable areFieldsSet = isTimeSet = false; } - /** - * Clears the specified field to zero and sets the isSet flag to {@code false}. - * - * @param field - * the field to clear. - */ public final void clear(int field) { fields[field] = 0; isSet[field] = false; areFieldsSet = isTimeSet = false; } - /** - * Returns a new {@code Calendar} with the same properties. - * - * @return a shallow copy of this {@code Calendar}. - * - * @see java.lang.Cloneable - */ @Override public Object clone() { try { @@ -537,14 +209,6 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable } } - /** - * Computes the time from the fields if the time has not already been set. - * Computes the fields from the time if the fields are not already set. - * - * @throws IllegalArgumentException - * if the time is not set and the time cannot be computed - * from the current field values. - */ protected void complete() { if (!isTimeSet) { computeTime(); @@ -556,30 +220,10 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable } } - /** - * Computes the {@code Calendar} fields from {@code time}. - */ protected abstract void computeFields(); - /** - * Computes {@code time} from the Calendar fields. - * - * @throws IllegalArgumentException - * if the time cannot be computed from the current field - * values. - */ protected abstract void computeTime(); - /** - * Compares the specified object to this {@code Calendar} and returns whether they are - * equal. The object must be an instance of {@code Calendar} and have the same - * properties. - * - * @param object - * the object to compare with this object. - * @return {@code true} if the specified object is equal to this {@code Calendar}, {@code false} - * otherwise. - */ @Override public boolean equals(Object object) { if (this == object) { @@ -589,41 +233,17 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return false; } Calendar cal = (Calendar) object; - return getTimeInMillis() == cal.getTimeInMillis() - && isLenient() == cal.isLenient() - && getFirstDayOfWeek() == cal.getFirstDayOfWeek() - && getMinimalDaysInFirstWeek() == cal - .getMinimalDaysInFirstWeek() - && getTimeZone().equals(cal.getTimeZone()); + return getTimeInMillis() == cal.getTimeInMillis() && isLenient() == cal.isLenient() && + getFirstDayOfWeek() == cal.getFirstDayOfWeek() && + getMinimalDaysInFirstWeek() == cal.getMinimalDaysInFirstWeek() && + getTimeZone().equals(cal.getTimeZone()); } - /** - * Gets the value of the specified field after computing the field values by - * calling {@code complete()} first. - * - * @param field - * the field to get. - * @return the value of the specified field. - * - * @throws IllegalArgumentException - * if the fields are not set, the time is not set, and the - * time cannot be computed from the current field values. - * @throws ArrayIndexOutOfBoundsException - * if the field is not inside the range of possible fields. - * The range is starting at 0 up to {@code FIELD_COUNT}. - */ public int get(int field) { complete(); return fields[field]; } - /** - * Gets the maximum value of the specified field for the current date. - * - * @param field - * the field. - * @return the maximum value of the specified field. - */ public int getActualMaximum(int field) { int value, next; if (getMaximum(field) == (next = getLeastMaximum(field))) { @@ -642,13 +262,6 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return value; } - /** - * Gets the minimum value of the specified field for the current date. - * - * @param field - * the field. - * @return the minimum value of the specified field. - */ public int getActualMinimum(int field) { int value, next; if (getMinimum(field) == (next = getGreatestMinimum(field))) { @@ -667,149 +280,46 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return value; } - /** - * Gets the list of installed {@code Locale}s which support {@code Calendar}. - * - * @return an array of {@code Locale}. - */ - public static synchronized Locale[] getAvailableLocales() { - return Locale.getAvailableLocales(); + public static synchronized TLocale[] getAvailableLocales() { + return TLocale.getAvailableLocales(); } - /** - * Gets the first day of the week for this {@code Calendar}. - * - * @return the first day of the week. - */ public int getFirstDayOfWeek() { return firstDayOfWeek; } - /** - * Gets the greatest minimum value of the specified field. This is the - * biggest value that {@code getActualMinimum} can return for any possible - * time. - * - * @param field - * the field. - * @return the greatest minimum value of the specified field. - */ abstract public int getGreatestMinimum(int field); - /** - * Constructs a new instance of the {@code Calendar} subclass appropriate for the - * default {@code Locale}. - * - * @return a {@code Calendar} subclass instance set to the current date and time in - * the default {@code Timezone}. - */ public static synchronized Calendar getInstance() { return new GregorianCalendar(); } - /** - * Constructs a new instance of the {@code Calendar} subclass appropriate for the - * specified {@code Locale}. - * - * @param locale - * the locale to use. - * @return a {@code Calendar} subclass instance set to the current date and time. - */ - public static synchronized Calendar getInstance(Locale locale) { + public static synchronized Calendar getInstance(TLocale locale) { return new GregorianCalendar(locale); } - /** - * Constructs a new instance of the {@code Calendar} subclass appropriate for the - * default {@code Locale}, using the specified {@code TimeZone}. - * - * @param timezone - * the {@code TimeZone} to use. - * @return a {@code Calendar} subclass instance set to the current date and time in - * the specified timezone. - */ public static synchronized Calendar getInstance(TimeZone timezone) { return new GregorianCalendar(timezone); } - /** - * Constructs a new instance of the {@code Calendar} subclass appropriate for the - * specified {@code Locale}. - * - * @param timezone - * the {@code TimeZone} to use. - * @param locale - * the {@code Locale} to use. - * @return a {@code Calendar} subclass instance set to the current date and time in - * the specified timezone. - */ - public static synchronized Calendar getInstance(TimeZone timezone, - Locale locale) { + public static synchronized Calendar getInstance(TimeZone timezone, TLocale locale) { return new GregorianCalendar(timezone, locale); } - /** - * Gets the smallest maximum value of the specified field. This is the - * smallest value that {@code getActualMaximum()} can return for any - * possible time. - * - * @param field - * the field number. - * @return the smallest maximum value of the specified field. - */ abstract public int getLeastMaximum(int field); - /** - * Gets the greatest maximum value of the specified field. This returns the - * biggest value that {@code get} can return for the specified field. - * - * @param field - * the field. - * @return the greatest maximum value of the specified field. - */ abstract public int getMaximum(int field); - /** - * Gets the minimal days in the first week of the year. - * - * @return the minimal days in the first week of the year. - */ public int getMinimalDaysInFirstWeek() { return minimalDaysInFirstWeek; } - /** - * Gets the smallest minimum value of the specified field. this returns the - * smallest value thet {@code get} can return for the specified field. - * - * @param field - * the field number. - * @return the smallest minimum value of the specified field. - */ abstract public int getMinimum(int field); - /** - * Gets the time of this {@code Calendar} as a {@code Date} object. - * - * @return a new {@code Date} initialized to the time of this {@code Calendar}. - * - * @throws IllegalArgumentException - * if the time is not set and the time cannot be computed - * from the current field values. - */ public final Date getTime() { return new Date(getTimeInMillis()); } - /** - * Computes the time from the fields if required and returns the time. - * - * @return the time of this {@code Calendar}. - * - * @throws IllegalArgumentException - * if the time is not set and the time cannot be computed - * from the current field values. - */ public long getTimeInMillis() { if (!isTimeSet) { computeTime(); @@ -818,72 +328,28 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return time; } - /** - * Gets the timezone of this {@code Calendar}. - * - * @return the {@code TimeZone} used by this {@code Calendar}. - */ public TimeZone getTimeZone() { return zone; } - /** - * Returns an integer hash code for the receiver. Objects which are equal - * return the same value for this method. - * - * @return the receiver's hash. - * - * @see #equals - */ @Override public int hashCode() { - return (isLenient() ? 1237 : 1231) + getFirstDayOfWeek() - + getMinimalDaysInFirstWeek() + getTimeZone().hashCode(); + return (isLenient() ? 1237 : 1231) + getFirstDayOfWeek() + getMinimalDaysInFirstWeek() + + getTimeZone().hashCode(); } - /** - * Gets the value of the specified field without recomputing. - * - * @param field - * the field. - * @return the value of the specified field. - */ protected final int internalGet(int field) { return fields[field]; } - /** - * Returns if this {@code Calendar} accepts field values which are outside the valid - * range for the field. - * - * @return {@code true} if this {@code Calendar} is lenient, {@code false} otherwise. - */ public boolean isLenient() { return lenient; } - /** - * Returns whether the specified field is set. - * - * @param field - * a {@code Calendar} field number. - * @return {@code true} if the specified field is set, {@code false} otherwise. - */ public final boolean isSet(int field) { return isSet[field]; } - /** - * Adds the specified amount to the specified field and wraps the value of - * the field when it goes beyond the maximum or minimum value for the - * current date. Other fields will be adjusted as required to maintain a - * consistent date. - * - * @param field - * the field to roll. - * @param value - * the amount to add. - */ public void roll(int field, int value) { boolean increment = value >= 0; int count = increment ? value : -value; @@ -892,27 +358,8 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable } } - /** - * Increment or decrement the specified field and wrap the value of the - * field when it goes beyond the maximum or minimum value for the current - * date. Other fields will be adjusted as required to maintain a consistent - * date. - * - * @param field - * the number indicating the field to roll. - * @param increment - * {@code true} to increment the field, {@code false} to decrement. - */ abstract public void roll(int field, boolean increment); - /** - * Sets a field to the specified value. - * - * @param field - * the code indicating the {@code Calendar} field to modify. - * @param value - * the value. - */ public void set(int field, int value) { fields[field] = value; isSet[field] = true; @@ -928,115 +375,39 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable } } - /** - * Sets the year, month and day of the month fields. Other fields are not - * changed. - * - * @param year - * the year. - * @param month - * the month. - * @param day - * the day of the month. - */ public final void set(int year, int month, int day) { set(YEAR, year); set(MONTH, month); set(DATE, day); } - /** - * Sets the year, month, day of the month, hour of day and minute fields. - * Other fields are not changed. - * - * @param year - * the year. - * @param month - * the month. - * @param day - * the day of the month. - * @param hourOfDay - * the hour of day. - * @param minute - * the minute. - */ - public final void set(int year, int month, int day, int hourOfDay, - int minute) { + public final void set(int year, int month, int day, int hourOfDay, int minute) { set(year, month, day); set(HOUR_OF_DAY, hourOfDay); set(MINUTE, minute); } - /** - * Sets the year, month, day of the month, hour of day, minute and second - * fields. Other fields are not changed. - * - * @param year - * the year. - * @param month - * the month. - * @param day - * the day of the month. - * @param hourOfDay - * the hour of day. - * @param minute - * the minute. - * @param second - * the second. - */ - public final void set(int year, int month, int day, int hourOfDay, - int minute, int second) { + public final void set(int year, int month, int day, int hourOfDay, int minute, int second) { set(year, month, day, hourOfDay, minute); set(SECOND, second); } - /** - * Sets the first day of the week for this {@code Calendar}. - * - * @param value - * a {@code Calendar} day of the week. - */ public void setFirstDayOfWeek(int value) { firstDayOfWeek = value; } - /** - * Sets this {@code Calendar} to accept field values which are outside the valid - * range for the field. - * - * @param value - * a boolean value. - */ public void setLenient(boolean value) { lenient = value; } - /** - * Sets the minimal days in the first week of the year. - * - * @param value - * the minimal days in the first week of the year. - */ public void setMinimalDaysInFirstWeek(int value) { minimalDaysInFirstWeek = value; } - /** - * Sets the time of this {@code Calendar}. - * - * @param date - * a {@code Date} object. - */ public final void setTime(Date date) { setTimeInMillis(date.getTime()); } - /** - * Sets the time of this {@code Calendar}. - * - * @param milliseconds - * the time as the number of milliseconds since Jan. 1, 1970. - */ public void setTimeInMillis(long milliseconds) { if (!isTimeSet || !areFieldsSet || time != milliseconds) { time = milliseconds; @@ -1046,33 +417,18 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable } } - /** - * Sets the {@code TimeZone} used by this Calendar. - * - * @param timezone - * a {@code TimeZone}. - */ public void setTimeZone(TimeZone timezone) { zone = timezone; areFieldsSet = false; } - /** - * Returns the string representation of this {@code Calendar}. - * - * @return the string representation of this {@code Calendar}. - */ @Override @SuppressWarnings("nls") public String toString() { - StringBuilder result = new StringBuilder(getClass().getName() + "[time=" - + (isTimeSet ? String.valueOf(time) : "?") - + ",areFieldsSet=" - + areFieldsSet - + // ",areAllFieldsSet=" + areAllFieldsSet + - ",lenient=" + lenient + ",zone=" + zone + ",firstDayOfWeek=" - + firstDayOfWeek + ",minimalDaysInFirstWeek=" - + minimalDaysInFirstWeek); + StringBuilder result = new StringBuilder(getClass().getName() + "[time=" + + (isTimeSet ? String.valueOf(time) : "?") + ",areFieldsSet=" + areFieldsSet + ",lenient=" + lenient + + ",zone=" + zone + ",firstDayOfWeek=" + firstDayOfWeek + ",minimalDaysInFirstWeek=" + + minimalDaysInFirstWeek); for (int i = 0; i < FIELD_COUNT; i++) { result.append(','); result.append(fieldNames[i]); @@ -1087,21 +443,7 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable return result.toString(); } - /** - * Compares the times of the two {@code Calendar}, which represent the milliseconds - * from the January 1, 1970 00:00:00.000 GMT (Gregorian). - * - * @param anotherCalendar - * another calendar that this one is compared with. - * @return 0 if the times of the two {@code Calendar}s are equal, -1 if the time of - * this {@code Calendar} is before the other one, 1 if the time of this - * {@code Calendar} is after the other one. - * @throws NullPointerException - * if the argument is null. - * @throws IllegalArgumentException - * if the argument does not include a valid time - * value. - */ + @Override public int compareTo(Calendar anotherCalendar) { if (null == anotherCalendar) { throw new NullPointerException(); @@ -1116,51 +458,4 @@ public abstract class Calendar implements TSerializable, TCloneable, TComparable } return -1; } - - @SuppressWarnings("nls") - private static final ObjectStreamField[] serialPersistentFields = { - new ObjectStreamField("areFieldsSet", Boolean.TYPE), - new ObjectStreamField("fields", int[].class), - new ObjectStreamField("firstDayOfWeek", Integer.TYPE), - new ObjectStreamField("isSet", boolean[].class), - new ObjectStreamField("isTimeSet", Boolean.TYPE), - new ObjectStreamField("lenient", Boolean.TYPE), - new ObjectStreamField("minimalDaysInFirstWeek", Integer.TYPE), - new ObjectStreamField("nextStamp", Integer.TYPE), - new ObjectStreamField("serialVersionOnStream", Integer.TYPE), - new ObjectStreamField("time", Long.TYPE), - new ObjectStreamField("zone", TimeZone.class), }; - - @SuppressWarnings("nls") - private void writeObject(ObjectOutputStream stream) throws IOException { - complete(); - ObjectOutputStream.PutField putFields = stream.putFields(); - putFields.put("areFieldsSet", areFieldsSet); - putFields.put("fields", this.fields); - putFields.put("firstDayOfWeek", firstDayOfWeek); - putFields.put("isSet", isSet); - putFields.put("isTimeSet", isTimeSet); - putFields.put("lenient", lenient); - putFields.put("minimalDaysInFirstWeek", minimalDaysInFirstWeek); - putFields.put("nextStamp", 2 /* MINIMUM_USER_STAMP */); - putFields.put("serialVersionOnStream", 1); - putFields.put("time", time); - putFields.put("zone", zone); - stream.writeFields(); - } - - @SuppressWarnings("nls") - private void readObject(ObjectInputStream stream) throws IOException, - ClassNotFoundException { - ObjectInputStream.GetField readFields = stream.readFields(); - areFieldsSet = readFields.get("areFieldsSet", false); - this.fields = (int[]) readFields.get("fields", null); - firstDayOfWeek = readFields.get("firstDayOfWeek", Calendar.SUNDAY); - isSet = (boolean[]) readFields.get("isSet", null); - isTimeSet = readFields.get("isTimeSet", false); - lenient = readFields.get("lenient", true); - minimalDaysInFirstWeek = readFields.get("minimalDaysInFirstWeek", 1); - time = readFields.get("time", 0L); - zone = (TimeZone) readFields.get("zone", null); - } } 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 dd8b4a915..444558a8a 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 @@ -47,34 +47,16 @@ public class Date implements TSerializable, TCloneable, TComparable { private transient long milliseconds; @SuppressWarnings("nls") - private static String[] dayOfWeekNames = { "Sun", "Mon", "Tue", "Wed", - "Thu", "Fri", "Sat" }; + private static String[] dayOfWeekNames = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; @SuppressWarnings("nls") - private static String[] monthNames = { "Jan", "Feb", "Mar", "Apr", "May", - "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + private static String[] monthNames = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", + "Dec" }; - /** - * Initializes this {@code Date} instance to the current date and time. - */ public Date() { this(System.currentTimeMillis()); } - /** - * Constructs a new {@code Date} initialized to midnight in the default {@code TimeZone} on - * the specified date. - * - * @param year - * the year, 0 is 1900. - * @param month - * the month, 0 - 11. - * @param day - * the day of the month, 1 - 31. - * - * @deprecated use - * {@link GregorianCalendar#GregorianCalendar(int, int, int)} - */ @Deprecated public Date(int year, int month, int day) { GregorianCalendar cal = new GregorianCalendar(false); @@ -82,24 +64,6 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Constructs a new {@code Date} initialized to the specified date and time in the - * default {@code TimeZone}. - * - * @param year - * the year, 0 is 1900. - * @param month - * the month, 0 - 11. - * @param day - * the day of the month, 1 - 31. - * @param hour - * the hour of day, 0 - 23. - * @param minute - * the minute of the hour, 0 - 59. - * - * @deprecated use - * {@link GregorianCalendar#GregorianCalendar(int, int, int, int, int)} - */ @Deprecated public Date(int year, int month, int day, int hour, int minute) { GregorianCalendar cal = new GregorianCalendar(false); @@ -107,26 +71,6 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Constructs a new {@code Date} initialized to the specified date and time in the - * default {@code TimeZone}. - * - * @param year - * the year, 0 is 1900. - * @param month - * the month, 0 - 11. - * @param day - * the day of the month, 1 - 31. - * @param hour - * the hour of day, 0 - 23. - * @param minute - * the minute of the hour, 0 - 59. - * @param second - * the second of the minute, 0 - 59. - * - * @deprecated use - * {@link GregorianCalendar#GregorianCalendar(int, int, int, int, int, int)} - */ @Deprecated public Date(int year, int month, int day, int hour, int minute, int second) { GregorianCalendar cal = new GregorianCalendar(false); @@ -134,62 +78,23 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Initializes this {@code Date} instance using the specified millisecond value. The - * value is the number of milliseconds since Jan. 1, 1970 GMT. - * - * @param milliseconds - * the number of milliseconds since Jan. 1, 1970 GMT. - */ public Date(long milliseconds) { this.milliseconds = milliseconds; } - /** - * Constructs a new {@code Date} initialized to the date and time parsed from the - * specified String. - * - * @param string - * the String to parse. - * - * @deprecated use {@link DateFormat} - */ @Deprecated public Date(String string) { milliseconds = parse(string); } - /** - * Returns if this {@code Date} is after the specified Date. - * - * @param date - * a Date instance to compare. - * @return {@code true} if this {@code Date} is after the specified {@code Date}, - * {@code false} otherwise. - */ public boolean after(Date date) { return milliseconds > date.milliseconds; } - /** - * Returns if this {@code Date} is before the specified Date. - * - * @param date - * a {@code Date} instance to compare. - * @return {@code true} if this {@code Date} is before the specified {@code Date}, - * {@code false} otherwise. - */ public boolean before(Date date) { return milliseconds < date.milliseconds; } - /** - * Returns a new {@code Date} with the same millisecond value as this {@code Date}. - * - * @return a shallow copy of this {@code Date}. - * - * @see java.lang.Cloneable - */ @Override public Object clone() { try { @@ -199,15 +104,6 @@ public class Date implements TSerializable, TCloneable, TComparable { } } - /** - * Compare the receiver to the specified {@code Date} to determine the relative - * ordering. - * - * @param date - * a {@code Date} to compare against. - * @return an {@code int < 0} if this {@code Date} is less than the specified {@code Date}, {@code 0} if - * they are equal, and an {@code int > 0} if this {@code Date} is greater. - */ public int compareTo(Date date) { if (milliseconds < date.milliseconds) { return -1; @@ -218,140 +114,56 @@ public class Date implements TSerializable, TCloneable, TComparable { return 1; } - /** - * Compares the specified object to this {@code Date} and returns if they are equal. - * To be equal, the object must be an instance of {@code Date} and have the same millisecond - * value. - * - * @param object - * the object to compare with this object. - * @return {@code true} if the specified object is equal to this {@code Date}, {@code false} - * otherwise. - * - * @see #hashCode - */ @Override public boolean equals(Object object) { - return (object == this) || (object instanceof Date) - && (milliseconds == ((Date) object).milliseconds); + return (object == this) || (object instanceof Date) && (milliseconds == ((Date) object).milliseconds); } - /** - * Returns the gregorian calendar day of the month for this {@code Date} object. - * - * @return the day of the month. - * - * @deprecated use {@code Calendar.get(Calendar.DATE)} - */ @Deprecated public int getDate() { return new GregorianCalendar(milliseconds).get(Calendar.DATE); } - /** - * Returns the gregorian calendar day of the week for this {@code Date} object. - * - * @return the day of the week. - * - * @deprecated use {@code Calendar.get(Calendar.DAY_OF_WEEK)} - */ @Deprecated public int getDay() { return new GregorianCalendar(milliseconds).get(Calendar.DAY_OF_WEEK) - 1; } - /** - * Returns the gregorian calendar hour of the day for this {@code Date} object. - * - * @return the hour of the day. - * - * @deprecated use {@code Calendar.get(Calendar.HOUR_OF_DAY)} - */ @Deprecated public int getHours() { return new GregorianCalendar(milliseconds).get(Calendar.HOUR_OF_DAY); } - /** - * Returns the gregorian calendar minute of the hour for this {@code Date} object. - * - * @return the minutes. - * - * @deprecated use {@code Calendar.get(Calendar.MINUTE)} - */ @Deprecated public int getMinutes() { return new GregorianCalendar(milliseconds).get(Calendar.MINUTE); } - /** - * Returns the gregorian calendar month for this {@code Date} object. - * - * @return the month. - * - * @deprecated use {@code Calendar.get(Calendar.MONTH)} - */ @Deprecated public int getMonth() { return new GregorianCalendar(milliseconds).get(Calendar.MONTH); } - /** - * Returns the gregorian calendar second of the minute for this {@code Date} object. - * - * @return the seconds. - * - * @deprecated use {@code Calendar.get(Calendar.SECOND)} - */ @Deprecated public int getSeconds() { return new GregorianCalendar(milliseconds).get(Calendar.SECOND); } - /** - * Returns this {@code Date} as a millisecond value. The value is the number of - * milliseconds since Jan. 1, 1970, midnight GMT. - * - * @return the number of milliseconds since Jan. 1, 1970, midnight GMT. - */ public long getTime() { return milliseconds; } - /** - * Returns the timezone offset in minutes of the default {@code TimeZone}. - * - * @return the timezone offset in minutes of the default {@code TimeZone}. - * - * @deprecated use - * {@code (Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / 60000} - */ @Deprecated public int getTimezoneOffset() { GregorianCalendar cal = new GregorianCalendar(milliseconds); return -(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 60000; } - /** - * Returns the gregorian calendar year since 1900 for this {@code Date} object. - * - * @return the year - 1900. - * - * @deprecated use {@code Calendar.get(Calendar.YEAR) - 1900} - */ @Deprecated public int getYear() { return new GregorianCalendar(milliseconds).get(Calendar.YEAR) - 1900; } - /** - * Returns an integer hash code for the receiver. Objects which are equal - * return the same value for this method. - * - * @return this {@code Date}'s hash. - * - * @see #equals - */ @Override public int hashCode() { return (int) (milliseconds >>> 32) ^ (int) milliseconds; @@ -366,23 +178,12 @@ public class Date implements TSerializable, TCloneable, TComparable { return -1; } - /** - * Returns the millisecond value of the date and time parsed from the - * specified {@code String}. Many date/time formats are recognized, including IETF - * standard syntax, i.e. Tue, 22 Jun 1999 12:16:00 GMT-0500 - * - * @param string - * the String to parse. - * @return the millisecond value parsed from the String. - * - * @deprecated use {@link DateFormat} - */ @Deprecated public static long parse(String string) { if (string == null) { // luni.06=The string argument is null - throw new IllegalArgumentException(Messages.getString("luni.06")); //$NON-NLS-1$ + throw new IllegalArgumentException(); } char sign = 0; @@ -428,11 +229,8 @@ public class Date implements TSerializable, TCloneable, TComparable { if (zoneOffset == 0) { zone = true; if (next == ':') { - minutesOffset = sign == '-' ? -Integer - .parseInt(string.substring(offset, - offset + 2)) : Integer - .parseInt(string.substring(offset, - offset + 2)); + minutesOffset = sign == '-' ? -Integer.parseInt(string.substring(offset, offset + 2)) + : Integer.parseInt(string.substring(offset, offset + 2)); offset += 2; } zoneOffset = sign == '-' ? -digit : digit; @@ -441,9 +239,7 @@ public class Date implements TSerializable, TCloneable, TComparable { throw new IllegalArgumentException(); } } else if (digit >= 70) { - if (year == -1 - && (Character.isSpace(next) || next == ',' - || next == '/' || next == '\r')) { + if (year == -1 && (Character.isSpace(next) || next == ',' || next == '/' || next == '\r')) { year = digit; } else { throw new IllegalArgumentException(); @@ -464,8 +260,7 @@ public class Date implements TSerializable, TCloneable, TComparable { } else { throw new IllegalArgumentException(); } - } else if (Character.isSpace(next) || next == ',' - || next == '-' || next == '\r') { + } else if (Character.isSpace(next) || next == ',' || next == '-' || next == '\r') { if (hour != -1 && minute == -1) { minute = digit; } else if (minute != -1 && second == -1) { @@ -502,15 +297,12 @@ public class Date implements TSerializable, TCloneable, TComparable { } hour += 12; } else { - DateFormatSymbols symbols = new DateFormatSymbols(Locale.US); - String[] weekdays = symbols.getWeekdays(), months = symbols - .getMonths(); + DateFormatSymbols symbols = new DateFormatSymbols(TLocale.US); + String[] weekdays = symbols.getWeekdays(), months = symbols.getMonths(); int value; if (parse(text, weekdays) != -1) {/* empty */ - } else if (month == -1 - && (month = parse(text, months)) != -1) {/* empty */ - } else if (text.equals("GMT") || text.equals("UT") //$NON-NLS-1$ //$NON-NLS-2$ - || text.equals("UTC")) { //$NON-NLS-1$ + } else if (month == -1 && (month = parse(text, months)) != -1) {/* empty */ + } else if (text.equals("GMT") || text.equals("UT") || text.equals("UTC")) { zone = true; zoneOffset = 0; } else if ((value = zone(text)) != 0) { @@ -524,8 +316,7 @@ public class Date implements TSerializable, TCloneable, TComparable { if (next == '+' || (year != -1 && next == '-')) { sign = next; - } else if (!Character.isSpace(next) && next != ',' - && nextState != NUMBERS) { + } else if (!Character.isSpace(next) && next != ',' && nextState != NUMBERS) { sign = 0; } @@ -560,20 +351,11 @@ public class Date implements TSerializable, TCloneable, TComparable { } return UTC(year - 1900, month, date, hour, minute, second); } - return new Date(year - 1900, month, date, hour, minute, second) - .getTime(); + return new Date(year - 1900, month, date, hour, minute, second).getTime(); } throw new IllegalArgumentException(); } - /** - * Sets the gregorian calendar day of the month for this {@code Date} object. - * - * @param day - * the day of the month. - * - * @deprecated use {@code Calendar.set(Calendar.DATE, day)} - */ @Deprecated public void setDate(int day) { GregorianCalendar cal = new GregorianCalendar(milliseconds); @@ -581,14 +363,6 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Sets the gregorian calendar hour of the day for this {@code Date} object. - * - * @param hour - * the hour of the day. - * - * @deprecated use {@code Calendar.set(Calendar.HOUR_OF_DAY, hour)} - */ @Deprecated public void setHours(int hour) { GregorianCalendar cal = new GregorianCalendar(milliseconds); @@ -596,14 +370,6 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Sets the gregorian calendar minute of the hour for this {@code Date} object. - * - * @param minute - * the minutes. - * - * @deprecated use {@code Calendar.set(Calendar.MINUTE, minute)} - */ @Deprecated public void setMinutes(int minute) { GregorianCalendar cal = new GregorianCalendar(milliseconds); @@ -611,14 +377,6 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Sets the gregorian calendar month for this {@code Date} object. - * - * @param month - * the month. - * - * @deprecated use {@code Calendar.set(Calendar.MONTH, month)} - */ @Deprecated public void setMonth(int month) { GregorianCalendar cal = new GregorianCalendar(milliseconds); @@ -626,14 +384,6 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Sets the gregorian calendar second of the minute for this {@code Date} object. - * - * @param second - * the seconds. - * - * @deprecated use {@code Calendar.set(Calendar.SECOND, second)} - */ @Deprecated public void setSeconds(int second) { GregorianCalendar cal = new GregorianCalendar(milliseconds); @@ -641,25 +391,10 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Sets this {@code Date} to the specified millisecond value. The value is the - * number of milliseconds since Jan. 1, 1970 GMT. - * - * @param milliseconds - * the number of milliseconds since Jan. 1, 1970 GMT. - */ public void setTime(long milliseconds) { this.milliseconds = milliseconds; } - /** - * Sets the gregorian calendar year since 1900 for this {@code Date} object. - * - * @param year - * the year since 1900. - * - * @deprecated use {@code Calendar.set(Calendar.YEAR, year + 1900)} - */ @Deprecated public void setYear(int year) { GregorianCalendar cal = new GregorianCalendar(milliseconds); @@ -667,52 +402,28 @@ public class Date implements TSerializable, TCloneable, TComparable { milliseconds = cal.getTimeInMillis(); } - /** - * Returns the string representation of this {@code Date} in GMT in the format: 22 - * Jun 1999 13:02:00 GMT - * - * @return the string representation of this {@code Date} in GMT. - * - * @deprecated use {@link DateFormat} - */ @Deprecated public String toGMTString() { - SimpleDateFormat format1 = new SimpleDateFormat("d MMM ", Locale.US); //$NON-NLS-1$ - SimpleDateFormat format2 = new SimpleDateFormat( - " HH:mm:ss 'GMT'", Locale.US); //$NON-NLS-1$ - TimeZone gmtZone = TimeZone.getTimeZone("GMT"); //$NON-NLS-1$ + 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 format1.format(this) + gc.get(Calendar.YEAR) + format2.format(this); } - /** - * Returns the string representation of this {@code Date} for the default {@code Locale}. - * - * @return the string representation of this {@code Date} for the default {@code Locale}. - * - * @deprecated use {@link DateFormat} - */ @Deprecated public String toLocaleString() { return DateFormat.getDateTimeInstance().format(this); } - /** - * Returns the string representation of this {@code Date} in the format: Tue Jun 22 - * 13:07:00 GMT 1999 - * - * @return the string representation of this {@code Date}. - */ @Override public String toString() { Calendar cal = new GregorianCalendar(milliseconds); TimeZone zone = cal.getTimeZone(); - String zoneName = zone.getDisplayName(zone.inDaylightTime(this), - TimeZone.SHORT, Locale.getDefault()); + 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]); @@ -735,80 +446,46 @@ public class Date implements TSerializable, TCloneable, TComparable { } private String toTwoDigits(int digit) { - if(digit >= 10) { - return "" + digit;//$NON-NLS-1$ + if (digit >= 10) { + return "" + digit; } else { - return "0" + digit;//$NON-NLS-1$ + return "0" + digit; } } - /** - * Returns the millisecond value of the specified date and time in GMT. - * - * @param year - * the year, 0 is 1900. - * @param month - * the month, 0 - 11. - * @param day - * the day of the month, 1 - 31. - * @param hour - * the hour of day, 0 - 23. - * @param minute - * the minute of the hour, 0 - 59. - * @param second - * the second of the minute, 0 - 59. - * @return the date and time in GMT in milliseconds. - * - * @deprecated use: - * Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); - * cal.set(year + 1900, month, day, hour, minute, second); - * cal.getTime().getTime(); - */ @Deprecated - public static long UTC(int year, int month, int day, int hour, int minute, - int second) { + 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")); //$NON-NLS-1$ + cal.setTimeZone(TimeZone.getTimeZone("GMT")); cal.set(1900 + year, month, day, hour, minute, second); return cal.getTimeInMillis(); } private static int zone(String text) { - if (text.equals("EST")) { //$NON-NLS-1$ + if (text.equals("EST")) { return -5; } - if (text.equals("EDT")) { //$NON-NLS-1$ + if (text.equals("EDT")) { return -4; } - if (text.equals("CST")) { //$NON-NLS-1$ + if (text.equals("CST")) { return -6; } - if (text.equals("CDT")) { //$NON-NLS-1$ + if (text.equals("CDT")) { return -5; } - if (text.equals("MST")) { //$NON-NLS-1$ + if (text.equals("MST")) { return -7; } - if (text.equals("MDT")) { //$NON-NLS-1$ + if (text.equals("MDT")) { return -6; } - if (text.equals("PST")) { //$NON-NLS-1$ + if (text.equals("PST")) { return -8; } - if (text.equals("PDT")) { //$NON-NLS-1$ + if (text.equals("PDT")) { return -7; } return 0; } - - private void writeObject(ObjectOutputStream stream) throws IOException { - stream.defaultWriteObject(); - stream.writeLong(getTime()); - } - - private void readObject(ObjectInputStream stream) throws IOException, - ClassNotFoundException { - stream.defaultReadObject(); - setTime(stream.readLong()); - } } 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 90ab6a763..426a2406c 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 @@ -17,174 +17,7 @@ package org.teavm.classlib.java.util; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - -/** - * {@code GregorianCalendar} is a concrete subclass of {@link Calendar} - * and provides the standard calendar used by most of the world. - * - *

- * The standard (Gregorian) calendar has 2 eras, BC and AD. - * - *

- * This implementation handles a single discontinuity, which corresponds by - * default to the date the Gregorian calendar was instituted (October 15, 1582 - * in some countries, later in others). The cutover date may be changed by the - * caller by calling {@code setGregorianChange()}. - * - *

- * Historically, in those countries which adopted the Gregorian calendar first, - * October 4, 1582 was thus followed by October 15, 1582. This calendar models - * this correctly. Before the Gregorian cutover, {@code GregorianCalendar} - * implements the Julian calendar. The only difference between the Gregorian and - * the Julian calendar is the leap year rule. The Julian calendar specifies leap - * years every four years, whereas the Gregorian calendar omits century years - * which are not divisible by 400. - * - *

- * {@code GregorianCalendar} implements proleptic Gregorian - * and Julian calendars. That is, dates are computed by extrapolating the - * current rules indefinitely far backward and forward in time. As a result, - * {@code GregorianCalendar} may be used for all years to generate - * meaningful and consistent results. However, dates obtained using - * {@code GregorianCalendar} are historically accurate only from March 1, - * 4 AD onward, when modern Julian calendar rules were adopted. Before this - * date, leap year rules were applied irregularly, and before 45 BC the Julian - * calendar did not even exist. - * - *

- * Prior to the institution of the Gregorian calendar, New Year's Day was March - * 25. To avoid confusion, this calendar always uses January 1. A manual - * adjustment may be made if desired for dates that are prior to the Gregorian - * changeover and which fall between January 1 and March 24. - * - *

- * Values calculated for the {@code WEEK_OF_YEAR} field range from 1 to - * 53. Week 1 for a year is the earliest seven day period starting on - * {@code getFirstDayOfWeek()} that contains at least - * {@code getMinimalDaysInFirstWeek()} days from that year. It thus - * depends on the values of {@code getMinimalDaysInFirstWeek()}, - * {@code getFirstDayOfWeek()}, and the day of the week of January 1. - * Weeks between week 1 of one year and week 1 of the following year are - * numbered sequentially from 2 to 52 or 53 (as needed). - * - *

- * For example, January 1, 1998 was a Thursday. If - * {@code getFirstDayOfWeek()} is {@code MONDAY} and - * {@code getMinimalDaysInFirstWeek()} is 4 (these are the values - * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts - * on December 29, 1997, and ends on January 4, 1998. If, however, - * {@code getFirstDayOfWeek()} is {@code SUNDAY}, then week 1 of - * 1998 starts on January 4, 1998, and ends on January 10, 1998; the first three - * days of 1998 then are part of week 53 of 1997. - * - *

- * Values calculated for the {@code WEEK_OF_MONTH} field range from 0 or - * 1 to 4 or 5. Week 1 of a month (the days with WEEK_OF_MONTH = - * 1) - * is the earliest set of at least {@code getMinimalDaysInFirstWeek()} - * contiguous days in that month, ending on the day before - * {@code getFirstDayOfWeek()}. Unlike week 1 of a year, week 1 of a - * month may be shorter than 7 days, need not start on - * {@code getFirstDayOfWeek()}, and will not include days of the - * previous month. Days of a month before week 1 have a - * {@code WEEK_OF_MONTH} of 0. - * - *

- * For example, if {@code getFirstDayOfWeek()} is {@code SUNDAY} - * and {@code getMinimalDaysInFirstWeek()} is 4, then the first week of - * January 1998 is Sunday, January 4 through Saturday, January 10. These days - * have a {@code WEEK_OF_MONTH} of 1. Thursday, January 1 through - * Saturday, January 3 have a {@code WEEK_OF_MONTH} of 0. If - * {@code getMinimalDaysInFirstWeek()} is changed to 3, then January 1 - * through January 3 have a {@code WEEK_OF_MONTH} of 1. - * - *

- * Example:

- * - *
- * // get the supported ids for GMT-08:00 (Pacific Standard Time)
- * String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
- * // if no ids were returned, something is wrong. get out.
- * if (ids.length == 0)
- *     System.exit(0);
- *
- *  // begin output
- * System.out.println("Current Time");
- *
- * // create a Pacific Standard Time time zone
- * SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
- *
- * // set up rules for daylight savings time
- * pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
- * pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
- *
- * // create a GregorianCalendar with the Pacific Daylight time zone
- * // and the current date and time
- * Calendar calendar = new GregorianCalendar(pdt);
- * Date trialTime = new Date();
- * calendar.setTime(trialTime);
- *
- * // print out a bunch of interesting things
- * System.out.println("ERA: " + calendar.get(Calendar.ERA));
- * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
- * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
- * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
- * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
- * System.out.println("DATE: " + calendar.get(Calendar.DATE));
- * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
- * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
- * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
- * System.out.println("DAY_OF_WEEK_IN_MONTH: "
- *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
- * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
- * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
- * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
- * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
- * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
- * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
- * System.out.println("ZONE_OFFSET: "
- *                    + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
- * System.out.println("DST_OFFSET: "
- *                    + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));
-
- * System.out.println("Current Time, with hour reset to 3");
- * calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
- * calendar.set(Calendar.HOUR, 3);
- * System.out.println("ERA: " + calendar.get(Calendar.ERA));
- * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
- * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
- * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
- * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
- * System.out.println("DATE: " + calendar.get(Calendar.DATE));
- * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
- * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
- * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
- * System.out.println("DAY_OF_WEEK_IN_MONTH: "
- *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
- * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
- * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
- * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
- * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
- * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
- * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
- * System.out.println("ZONE_OFFSET: "
- *        + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
- * System.out.println("DST_OFFSET: "
- *        + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours
- * 
- * - *
- * - * @see Calendar - * @see TimeZone - */ public class GregorianCalendar extends Calendar { - - private static final long serialVersionUID = -8125100834729963327L; - /** * Value for the BC era. */ @@ -236,7 +69,7 @@ public class GregorianCalendar extends Calendar { * time with the default {@code Locale} and {@code TimeZone}. */ public GregorianCalendar() { - this(TimeZone.getDefault(), Locale.getDefault()); + this(TimeZone.getDefault(), TLocale.getDefault()); } /** @@ -251,7 +84,7 @@ public class GregorianCalendar extends Calendar { * the day of the month. */ public GregorianCalendar(int year, int month, int day) { - super(TimeZone.getDefault(), Locale.getDefault()); + super(TimeZone.getDefault(), TLocale.getDefault()); set(year, month, day); } @@ -271,7 +104,7 @@ public class GregorianCalendar extends Calendar { * the minute. */ public GregorianCalendar(int year, int month, int day, int hour, int minute) { - super(TimeZone.getDefault(), Locale.getDefault()); + super(TimeZone.getDefault(), TLocale.getDefault()); set(year, month, day, hour, minute); } @@ -294,7 +127,7 @@ public class GregorianCalendar extends Calendar { */ public GregorianCalendar(int year, int month, int day, int hour, int minute, int second) { - super(TimeZone.getDefault(), Locale.getDefault()); + super(TimeZone.getDefault(), TLocale.getDefault()); set(year, month, day, hour, minute, second); } @@ -310,7 +143,7 @@ public class GregorianCalendar extends Calendar { * @param locale * the {@code Locale}. */ - public GregorianCalendar(Locale locale) { + public GregorianCalendar(TLocale locale) { this(TimeZone.getDefault(), locale); } @@ -322,7 +155,7 @@ public class GregorianCalendar extends Calendar { * the {@code TimeZone}. */ public GregorianCalendar(TimeZone timezone) { - this(timezone, Locale.getDefault()); + this(timezone, TLocale.getDefault()); } /** @@ -334,12 +167,12 @@ public class GregorianCalendar extends Calendar { * @param locale * the {@code Locale}. */ - public GregorianCalendar(TimeZone timezone, Locale locale) { + public GregorianCalendar(TimeZone timezone, TLocale locale) { super(timezone, locale); setTimeInMillis(System.currentTimeMillis()); } - GregorianCalendar(boolean ignored) { + GregorianCalendar(@SuppressWarnings("unused") boolean ignored) { super(TimeZone.getDefault()); setFirstDayOfWeek(SUNDAY); setMinimalDaysInFirstWeek(1); @@ -1413,18 +1246,6 @@ public class GregorianCalendar extends Calendar { isCached = false; } - private void writeObject(ObjectOutputStream stream) throws IOException { - stream.defaultWriteObject(); - } - - private void readObject(ObjectInputStream stream) throws IOException, - ClassNotFoundException { - - stream.defaultReadObject(); - setGregorianChange(new Date(gregorianCutover)); - isCached = false; - } - @Override public void setFirstDayOfWeek(int value) { super.setFirstDayOfWeek(value); 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 index 98a7f288e..edb563faa 100644 --- 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 @@ -17,33 +17,8 @@ package org.teavm.classlib.java.util; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamField; -import java.security.AccessController; -import java.security.PrivilegedAction; - -import org.apache.harmony.luni.internal.nls.Messages; - -/** - * {@code SimpleTimeZone} is a concrete subclass of {@code TimeZone} - * that represents a time zone for use with a Gregorian calendar. This class - * does not handle historical changes. - *

- * Use a negative value for {@code dayOfWeekInMonth} to indicate that - * {@code SimpleTimeZone} should count from the end of the month - * backwards. For example, Daylight Savings Time ends at the last - * (dayOfWeekInMonth = -1) Sunday in October, at 2 AM in standard time. - * - * @see Calendar - * @see GregorianCalendar - * @see TimeZone - */ public class SimpleTimeZone extends TimeZone { - private static final long serialVersionUID = -403250971215465050L; - private int rawOffset; private int startYear, startMonth, startDay, startDayOfWeek, startTime; @@ -52,26 +27,12 @@ public class SimpleTimeZone extends TimeZone { 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; + private static final int DOM_MODE = 1, DOW_IN_MONTH_MODE = 2, DOW_GE_DOM_MODE = 3, DOW_LE_DOM_MODE = 4; - /** - * The constant for representing a start or end time in GMT time mode. - */ public static final int UTC_TIME = 2; - /** - * The constant for representing a start or end time in standard local time mode, - * based on timezone's raw offset from GMT; does not include Daylight - * savings. - */ public static final int STANDARD_TIME = 1; - /** - * The constant for representing a start or end time in local wall clock time - * mode, based on timezone's adjusted offset from GMT; includes - * Daylight savings. - */ public static final int WALL_TIME = 0; private boolean useDaylight; @@ -80,22 +41,8 @@ public class SimpleTimeZone extends TimeZone { private int dstSavings = 3600000; - private final transient com.ibm.icu.util.TimeZone icuTZ; - private final transient boolean isSimple; - /** - * Constructs a {@code SimpleTimeZone} with the given base time zone offset from GMT - * and time zone ID. Timezone IDs can be obtained from - * {@code TimeZone.getAvailableIDs}. Normally you should use {@code TimeZone.getDefault} to - * construct a {@code TimeZone}. - * - * @param offset - * the given base time zone offset to GMT. - * @param name - * the time zone ID which is obtained from - * {@code TimeZone.getAvailableIDs}. - */ public SimpleTimeZone(int offset, final String name) { setID(name); rawOffset = offset; @@ -109,131 +56,18 @@ public class SimpleTimeZone extends TimeZone { useDaylight = icuTZ.useDaylightTime(); } - /** - * Constructs a {@code SimpleTimeZone} with the given base time zone offset from GMT, - * time zone ID, and times to start and end the daylight savings time. Timezone IDs can - * be obtained from {@code TimeZone.getAvailableIDs}. Normally you should use - * {@code TimeZone.getDefault} to create a {@code TimeZone}. For a time zone that does not - * use daylight saving time, do not use this constructor; instead you should - * use {@code SimpleTimeZone(rawOffset, ID)}. - *

- * By default, this constructor specifies day-of-week-in-month rules. That - * is, if the {@code startDay} is 1, and the {@code startDayOfWeek} is {@code SUNDAY}, then this - * indicates the first Sunday in the {@code startMonth}. A {@code startDay} of -1 likewise - * indicates the last Sunday. However, by using negative or zero values for - * certain parameters, other types of rules can be specified. - *

- * Day of month: To specify an exact day of the month, such as March 1, set - * {@code startDayOfWeek} to zero. - *

- * Day of week after day of month: To specify the first day of the week - * occurring on or after an exact day of the month, make the day of the week - * negative. For example, if {@code startDay} is 5 and {@code startDayOfWeek} is {@code -MONDAY}, - * this indicates the first Monday on or after the 5th day of the - * {@code startMonth}. - *

- * Day of week before day of month: To specify the last day of the week - * occurring on or before an exact day of the month, make the day of the - * week and the day of the month negative. For example, if {@code startDay} is {@code -21} - * and {@code startDayOfWeek} is {@code -WEDNESDAY}, this indicates the last Wednesday on or - * before the 21st of the {@code startMonth}. - *

- * The above examples refer to the {@code startMonth}, {@code startDay}, and {@code startDayOfWeek}; - * the same applies for the {@code endMonth}, {@code endDay}, and {@code endDayOfWeek}. - *

- * The daylight savings time difference is set to the default value: one hour. - * - * @param offset - * the given base time zone offset to GMT. - * @param name - * the time zone ID which is obtained from - * {@code TimeZone.getAvailableIDs}. - * @param startMonth - * the daylight savings starting month. The month indexing is 0-based. eg, 0 - * for January. - * @param startDay - * the daylight savings starting day-of-week-in-month. Please see - * the member description for an example. - * @param startDayOfWeek - * the daylight savings starting day-of-week. Please see the - * member description for an example. - * @param startTime - * the daylight savings starting time in local wall time, which - * is standard time in this case. Please see the member - * description for an example. - * @param endMonth - * the daylight savings ending month. The month indexing is 0-based. eg, 0 for - * January. - * @param endDay - * the daylight savings ending day-of-week-in-month. Please see - * the member description for an example. - * @param endDayOfWeek - * the daylight savings ending day-of-week. Please see the member - * description for an example. - * @param endTime - * the daylight savings ending time in local wall time, which is - * daylight time in this case. Please see the member description - * for an example. - * @throws IllegalArgumentException - * if the month, day, dayOfWeek, or time parameters are out of - * range for the start or end rule. - */ - 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) { + this(offset, name, startMonth, startDay, startDayOfWeek, startTime, endMonth, endDay, endDayOfWeek, endTime, + 3600000); } - /** - * Constructs a {@code SimpleTimeZone} with the given base time zone offset from GMT, - * time zone ID, times to start and end the daylight savings time, and - * the daylight savings time difference in milliseconds. - * - * @param offset - * the given base time zone offset to GMT. - * @param name - * the time zone ID which is obtained from - * {@code TimeZone.getAvailableIDs}. - * @param startMonth - * the daylight savings starting month. Month is 0-based. eg, 0 - * for January. - * @param startDay - * the daylight savings starting day-of-week-in-month. Please see - * the description of {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param startDayOfWeek - * the daylight savings starting day-of-week. Please see the - * description of {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param startTime - * The daylight savings starting time in local wall time, which - * is standard time in this case. Please see the description of - * {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param endMonth - * the daylight savings ending month. Month is 0-based. eg, 0 for - * January. - * @param endDay - * the daylight savings ending day-of-week-in-month. Please see - * the description of {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param endDayOfWeek - * the daylight savings ending day-of-week. Please see the description of - * {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param endTime - * the daylight savings ending time in local wall time, which is - * daylight time in this case. Please see the description of {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} - * for an example. - * @param daylightSavings - * the daylight savings time difference in milliseconds. - * @throws IllegalArgumentException - * if the month, day, dayOfWeek, or time parameters are out of - * range for the start or end rule. - */ - public SimpleTimeZone(int offset, String name, int startMonth, - int startDay, int startDayOfWeek, int startTime, int endMonth, - int endDay, int endDayOfWeek, int endTime, int daylightSavings) { + 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; + 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); @@ -244,8 +78,7 @@ public class SimpleTimeZone extends TimeZone { setID(name); rawOffset = offset; if (daylightSavings <= 0) { - throw new IllegalArgumentException(Messages.getString( - "luni.3B", daylightSavings)); //$NON-NLS-1$ + throw new IllegalArgumentException(String.valueOf(daylightSavings)); } dstSavings = daylightSavings; @@ -255,70 +88,16 @@ public class SimpleTimeZone extends TimeZone { useDaylight = daylightSavings > 0 || icuTZ.useDaylightTime(); } - /** - * Construct a {@code SimpleTimeZone} with the given base time zone offset from GMT, - * time zone ID, times to start and end the daylight savings time including a - * mode specifier, the daylight savings time difference in milliseconds. - * The mode specifies either {@link #WALL_TIME}, {@link #STANDARD_TIME}, or - * {@link #UTC_TIME}. - * - * @param offset - * the given base time zone offset to GMT. - * @param name - * the time zone ID which is obtained from - * {@code TimeZone.getAvailableIDs}. - * @param startMonth - * the daylight savings starting month. The month indexing is 0-based. eg, 0 - * for January. - * @param startDay - * the daylight savings starting day-of-week-in-month. Please see - * the description of {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param startDayOfWeek - * the daylight savings starting day-of-week. Please see the - * description of {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param startTime - * the time of day in milliseconds on which daylight savings - * time starts, based on the {@code startTimeMode}. - * @param startTimeMode - * the mode (UTC, standard, or wall time) of the start time - * value. - * @param endDay - * the day of the week on which daylight savings time ends. - * @param endMonth - * the daylight savings ending month. The month indexing is 0-based. eg, 0 for - * January. - * @param endDayOfWeek - * the daylight savings ending day-of-week. Please see the description of - * {@link #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)} for an example. - * @param endTime - * the time of day in milliseconds on which daylight savings - * time ends, based on the {@code endTimeMode}. - * @param endTimeMode - * the mode (UTC, standard, or wall time) of the end time value. - * @param daylightSavings - * the daylight savings time difference in milliseconds. - * @throws IllegalArgumentException - * if the month, day, dayOfWeek, or time parameters are out of - * range for the start or end rule. - */ - 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) { + 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); + this(offset, name, startMonth, startDay, startDayOfWeek, startTime, endMonth, endDay, endDayOfWeek, endTime, + daylightSavings); startMode = startTimeMode; endMode = endTimeMode; } - /** - * Returns a new {@code SimpleTimeZone} with the same ID, {@code rawOffset} and daylight - * savings time rules as this SimpleTimeZone. - * - * @return a shallow copy of this {@code SimpleTimeZone}. - * @see java.lang.Cloneable - */ @Override public Object clone() { SimpleTimeZone zone = (SimpleTimeZone) super.clone(); @@ -328,34 +107,19 @@ public class SimpleTimeZone extends TimeZone { return zone; } - /** - * Compares the specified object to this {@code SimpleTimeZone} and returns whether they - * are equal. The object must be an instance of {@code SimpleTimeZone} and have the - * same internal data. - * - * @param object - * the object to compare with this object. - * @return {@code true} if the specified object is equal to this - * {@code SimpleTimeZone}, {@code false} otherwise. - * @see #hashCode - */ @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)); + 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 @@ -367,10 +131,9 @@ public class SimpleTimeZone extends TimeZone { } @Override - public int getOffset(int era, int year, int month, int day, int dayOfWeek, - int time) { + 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(Messages.getString("luni.3C", era)); //$NON-NLS-1$ + throw new IllegalArgumentException(String.valueOf(era)); } checkRange(month, dayOfWeek, time); if (month != Calendar.FEBRUARY || day != 29 || !isLeapYear(year)) { @@ -389,20 +152,12 @@ public class SimpleTimeZone extends TimeZone { return rawOffset; } - /** - * Returns an integer hash code for the receiver. Objects which are equal - * return the same value for this method. - * - * @return the receiver's hash. - * @see #equals - */ @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; + hashCode += startYear + startMonth + startDay + startDayOfWeek + startTime + startMode + endMonth + endDay + + endDayOfWeek + endTime + endMode + dstSavings; } return hashCode; } @@ -419,13 +174,11 @@ public class SimpleTimeZone extends TimeZone { 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; + 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 @@ -440,12 +193,6 @@ public class SimpleTimeZone extends TimeZone { return year % 4 == 0; } - /** - * Sets the daylight savings offset in milliseconds for this {@code SimpleTimeZone}. - * - * @param milliseconds - * the daylight savings offset in milliseconds. - */ public void setDSTSavings(int milliseconds) { if (milliseconds > 0) { dstSavings = milliseconds; @@ -456,20 +203,19 @@ public class SimpleTimeZone extends TimeZone { private void checkRange(int month, int dayOfWeek, int time) { if (month < Calendar.JANUARY || month > Calendar.DECEMBER) { - throw new IllegalArgumentException(Messages.getString("luni.3D", month)); //$NON-NLS-1$ + throw new IllegalArgumentException(String.valueOf(month)); } if (dayOfWeek < Calendar.SUNDAY || dayOfWeek > Calendar.SATURDAY) { - throw new IllegalArgumentException(Messages - .getString("luni.48", dayOfWeek)); //$NON-NLS-1$ + throw new IllegalArgumentException(String.valueOf(dayOfWeek)); } if (time < 0 || time >= 24 * 3600000) { - throw new IllegalArgumentException(Messages.getString("luni.3E", time)); //$NON-NLS-1$ + throw new IllegalArgumentException(String.valueOf(time)); } } private void checkDay(int month, int day) { if (day <= 0 || day > GregorianCalendar.DaysInMonth[month]) { - throw new IllegalArgumentException(Messages.getString("luni.3F", day)); //$NON-NLS-1$ + throw new IllegalArgumentException(String.valueOf(day)); } } @@ -489,14 +235,12 @@ public class SimpleTimeZone extends TimeZone { } useDaylight = startDay != 0 && endDay != 0; if (endDay != 0) { - checkRange(endMonth, endMode == DOM_MODE ? 1 : endDayOfWeek, - endTime); + 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$ + throw new IllegalArgumentException(Messages.getString("luni.40", endDay)); //$NON-NLS-1$ } } } @@ -505,18 +249,6 @@ public class SimpleTimeZone extends TimeZone { } } - /** - * Sets the rule which specifies the end of daylight savings time. - * - * @param month - * the {@code Calendar} month in which daylight savings time ends. - * @param dayOfMonth - * the {@code Calendar} day of the month on which daylight savings time - * ends. - * @param time - * the time of day in milliseconds standard time on which - * daylight savings time ends. - */ public void setEndRule(int month, int dayOfMonth, int time) { endMonth = month; endDay = dayOfMonth; @@ -524,26 +256,10 @@ public class SimpleTimeZone extends TimeZone { endTime = time; setEndMode(); if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, - dayOfMonth, time); + ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, dayOfMonth, time); } } - /** - * Sets the rule which specifies the end of daylight savings time. - * - * @param month - * the {@code Calendar} month in which daylight savings time ends. - * @param day - * the occurrence of the day of the week on which daylight - * savings time ends. - * @param dayOfWeek - * the {@code Calendar} day of the week on which daylight savings time - * ends. - * @param time - * the time of day in milliseconds standard time on which - * daylight savings time ends. - */ public void setEndRule(int month, int day, int dayOfWeek, int time) { endMonth = month; endDay = day; @@ -551,46 +267,21 @@ public class SimpleTimeZone extends TimeZone { endTime = time; setEndMode(); if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, day, - dayOfWeek, time); + ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, day, dayOfWeek, time); } } - /** - * Sets the rule which specifies the end of daylight savings time. - * - * @param month - * the {@code Calendar} month in which daylight savings time ends. - * @param day - * the {@code Calendar} day of the month. - * @param dayOfWeek - * the {@code Calendar} day of the week on which daylight savings time - * ends. - * @param time - * the time of day in milliseconds on which daylight savings time - * ends. - * @param after - * selects the day after or before the day of month. - */ - public void setEndRule(int month, int day, int dayOfWeek, int time, - boolean after) { + 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); + ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, day, dayOfWeek, time, after); } } - /** - * Sets the offset for standard time from GMT for this {@code SimpleTimeZone}. - * - * @param offset - * the offset from GMT of standard time in milliseconds. - */ @Override public void setRawOffset(int offset) { rawOffset = offset; @@ -613,14 +304,12 @@ public class SimpleTimeZone extends TimeZone { } useDaylight = startDay != 0 && endDay != 0; if (startDay != 0) { - checkRange(startMonth, startMode == DOM_MODE ? 1 : startDayOfWeek, - startTime); + 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$ + throw new IllegalArgumentException(Messages.getString("luni.40", startDay)); //$NON-NLS-1$ } } } @@ -629,18 +318,6 @@ public class SimpleTimeZone extends TimeZone { } } - /** - * Sets the rule which specifies the start of daylight savings time. - * - * @param month - * the {@code Calendar} month in which daylight savings time starts. - * @param dayOfMonth - * the {@code Calendar} day of the month on which daylight savings time - * starts. - * @param time - * the time of day in milliseconds on which daylight savings time - * starts. - */ public void setStartRule(int month, int dayOfMonth, int time) { startMonth = month; startDay = dayOfMonth; @@ -648,26 +325,10 @@ public class SimpleTimeZone extends TimeZone { startTime = time; setStartMode(); if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, - dayOfMonth, time); + ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, dayOfMonth, time); } } - /** - * Sets the rule which specifies the start of daylight savings time. - * - * @param month - * the {@code Calendar} month in which daylight savings time starts. - * @param day - * the occurrence of the day of the week on which daylight - * savings time starts. - * @param dayOfWeek - * the {@code Calendar} day of the week on which daylight savings time - * starts. - * @param time - * the time of day in milliseconds on which daylight savings time - * starts. - */ public void setStartRule(int month, int day, int dayOfWeek, int time) { startMonth = month; startDay = day; @@ -675,199 +336,38 @@ public class SimpleTimeZone extends TimeZone { startTime = time; setStartMode(); if (isSimple) { - ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, day, - dayOfWeek, time); + ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, day, dayOfWeek, time); } } - /** - * Sets the rule which specifies the start of daylight savings time. - * - * @param month - * the {@code Calendar} month in which daylight savings time starts. - * @param day - * the {@code Calendar} day of the month. - * @param dayOfWeek - * the {@code Calendar} day of the week on which daylight savings time - * starts. - * @param time - * the time of day in milliseconds on which daylight savings time - * starts. - * @param after - * selects the day after or before the day of month. - */ - public void setStartRule(int month, int day, int dayOfWeek, int time, - boolean after) { + 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); + ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, day, dayOfWeek, time, after); } } - /** - * Sets the starting year for daylight savings time in this {@code SimpleTimeZone}. - * Years before this start year will always be in standard time. - * - * @param year - * the starting year. - */ public void setStartYear(int year) { startYear = year; useDaylight = true; } - /** - * Returns the string representation of this {@code SimpleTimeZone}. - * - * @return the string representation of this {@code SimpleTimeZone}. - */ @Override public String toString() { - return getClass().getName() - + "[id=" //$NON-NLS-1$ - + getID() - + ",offset=" //$NON-NLS-1$ - + rawOffset - + ",dstSavings=" //$NON-NLS-1$ - + dstSavings - + ",useDaylight=" //$NON-NLS-1$ - + useDaylight - + ",startYear=" //$NON-NLS-1$ - + startYear - + ",startMode=" //$NON-NLS-1$ - + startMode - + ",startMonth=" //$NON-NLS-1$ - + startMonth - + ",startDay=" //$NON-NLS-1$ - + startDay - + ",startDayOfWeek=" //$NON-NLS-1$ - + (useDaylight && (startMode != DOM_MODE) ? startDayOfWeek + 1 - : 0) + ",startTime=" + startTime + ",endMode=" //$NON-NLS-1$ //$NON-NLS-2$ - + endMode + ",endMonth=" + endMonth + ",endDay=" + endDay //$NON-NLS-1$ //$NON-NLS-2$ - + ",endDayOfWeek=" //$NON-NLS-1$ - + (useDaylight && (endMode != DOM_MODE) ? endDayOfWeek + 1 : 0) - + ",endTime=" + endTime + "]"; //$NON-NLS-1$//$NON-NLS-2$ + 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; } - - private static final ObjectStreamField[] serialPersistentFields = { - new ObjectStreamField("dstSavings", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("endDay", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("endDayOfWeek", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("endMode", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("endMonth", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("endTime", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("monthLength", byte[].class), //$NON-NLS-1$ - new ObjectStreamField("rawOffset", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("serialVersionOnStream", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("startDay", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("startDayOfWeek", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("startMode", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("startMonth", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("startTime", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("startYear", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("useDaylight", Boolean.TYPE), }; //$NON-NLS-1$ - - private void writeObject(ObjectOutputStream stream) throws IOException { - int sEndDay = endDay, sEndDayOfWeek = endDayOfWeek + 1, sStartDay = startDay, sStartDayOfWeek = startDayOfWeek + 1; - if (useDaylight - && (startMode != DOW_IN_MONTH_MODE || endMode != DOW_IN_MONTH_MODE)) { - Calendar cal = new GregorianCalendar(this); - if (endMode != DOW_IN_MONTH_MODE) { - cal.set(Calendar.MONTH, endMonth); - cal.set(Calendar.DATE, endDay); - sEndDay = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH); - if (endMode == DOM_MODE) { - sEndDayOfWeek = cal.getFirstDayOfWeek(); - } - } - if (startMode != DOW_IN_MONTH_MODE) { - cal.set(Calendar.MONTH, startMonth); - cal.set(Calendar.DATE, startDay); - sStartDay = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH); - if (startMode == DOM_MODE) { - sStartDayOfWeek = cal.getFirstDayOfWeek(); - } - } - } - ObjectOutputStream.PutField fields = stream.putFields(); - fields.put("dstSavings", dstSavings); //$NON-NLS-1$ - fields.put("endDay", sEndDay); //$NON-NLS-1$ - fields.put("endDayOfWeek", sEndDayOfWeek); //$NON-NLS-1$ - fields.put("endMode", endMode); //$NON-NLS-1$ - fields.put("endMonth", endMonth); //$NON-NLS-1$ - fields.put("endTime", endTime); //$NON-NLS-1$ - fields.put("monthLength", GregorianCalendar.DaysInMonth); //$NON-NLS-1$ - fields.put("rawOffset", rawOffset); //$NON-NLS-1$ - fields.put("serialVersionOnStream", 1); //$NON-NLS-1$ - fields.put("startDay", sStartDay); //$NON-NLS-1$ - fields.put("startDayOfWeek", sStartDayOfWeek); //$NON-NLS-1$ - fields.put("startMode", startMode); //$NON-NLS-1$ - fields.put("startMonth", startMonth); //$NON-NLS-1$ - fields.put("startTime", startTime); //$NON-NLS-1$ - fields.put("startYear", startYear); //$NON-NLS-1$ - fields.put("useDaylight", useDaylight); //$NON-NLS-1$ - stream.writeFields(); - stream.writeInt(4); - byte[] values = new byte[4]; - values[0] = (byte) startDay; - values[1] = (byte) (startMode == DOM_MODE ? 0 : startDayOfWeek + 1); - values[2] = (byte) endDay; - values[3] = (byte) (endMode == DOM_MODE ? 0 : endDayOfWeek + 1); - stream.write(values); - } - - private void readObject(ObjectInputStream stream) throws IOException, - ClassNotFoundException { - ObjectInputStream.GetField fields = stream.readFields(); - rawOffset = fields.get("rawOffset", 0); //$NON-NLS-1$ - useDaylight = fields.get("useDaylight", false); //$NON-NLS-1$ - if (useDaylight) { - endMonth = fields.get("endMonth", 0); //$NON-NLS-1$ - endTime = fields.get("endTime", 0); //$NON-NLS-1$ - startMonth = fields.get("startMonth", 0); //$NON-NLS-1$ - startTime = fields.get("startTime", 0); //$NON-NLS-1$ - startYear = fields.get("startYear", 0); //$NON-NLS-1$ - } - if (fields.get("serialVersionOnStream", 0) == 0) { //$NON-NLS-1$ - if (useDaylight) { - startMode = endMode = DOW_IN_MONTH_MODE; - endDay = fields.get("endDay", 0); //$NON-NLS-1$ - endDayOfWeek = fields.get("endDayOfWeek", 0) - 1; //$NON-NLS-1$ - startDay = fields.get("startDay", 0); //$NON-NLS-1$ - startDayOfWeek = fields.get("startDayOfWeek", 0) - 1; //$NON-NLS-1$ - } - } else { - dstSavings = fields.get("dstSavings", 0); //$NON-NLS-1$ - if (useDaylight) { - endMode = fields.get("endMode", 0); //$NON-NLS-1$ - startMode = fields.get("startMode", 0); //$NON-NLS-1$ - int length = stream.readInt(); - byte[] values = new byte[length]; - stream.readFully(values); - if (length >= 4) { - startDay = values[0]; - startDayOfWeek = values[1]; - if (startMode != DOM_MODE) { - startDayOfWeek--; - } - endDay = values[2]; - endDayOfWeek = values[3]; - if (endMode != DOM_MODE) { - endDayOfWeek--; - } - } - } - } - } - } 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 index c5691e1a9..323727add 100644 --- 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 @@ -32,26 +32,14 @@ package org.teavm.classlib.java.util; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; 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; - /** - * The SHORT display name style. - */ public static final int SHORT = 0; - /** - * The LONG display name style. - */ public static final int LONG = 1; private static THashMap AvailableZones; @@ -89,29 +77,16 @@ public abstract class TimeZone implements TSerializable, TCloneable { } public static synchronized String[] getAvailableIDs(int offset) { - List result = new ArrayList<>(); - for (TIterator iter = AvailableZones.values().iterator(); iter.hasNext()) { - if () - } - return Arrays.copyOf(result, j); - int count = 0; - int length = availableIDs.length; - String[] all = new String[length]; - for (int i = 0; i < length; i++) { + TList result = new TArrayList<>(); + for (TIterator iter = AvailableZones.values().iterator(); iter.hasNext();) { + TimeZone tz = iter.next(); if (tz.getRawOffset() == offset) { - all[count++] = tz.getID(); + result.add(tz.getID()); } } - String[] answer = new String[count]; - System.arraycopy(all, 0, answer, 0, count); - return answer; + return result.toArray(new String[0]); } - /** - * Gets the default time zone. - * - * @return the default time zone. - */ public static synchronized TimeZone getDefault() { if (Default == null) { setDefault(null); @@ -119,90 +94,29 @@ public abstract class TimeZone implements TSerializable, TCloneable { return (TimeZone) Default.clone(); } - /** - * Gets the LONG name for this {@code TimeZone} for the default {@code Locale} in standard - * time. If the name is not available, the result is in the format - * {@code GMT[+-]hh:mm}. - * - * @return the {@code TimeZone} name. - */ public final String getDisplayName() { - return getDisplayName(false, LONG, Locale.getDefault()); + return getDisplayName(false, LONG, TLocale.getDefault()); } - /** - * Gets the LONG name for this {@code TimeZone} for the specified {@code Locale} in standard - * time. If the name is not available, the result is in the format - * {@code GMT[+-]hh:mm}. - * - * @param locale - * the {@code Locale}. - * @return the {@code TimeZone} name. - */ - public final String getDisplayName(Locale locale) { + public final String getDisplayName(TLocale locale) { return getDisplayName(false, LONG, locale); } - /** - * Gets the specified style of name ({@code LONG} or {@code SHORT}) for this {@code TimeZone} for - * the default {@code Locale} in either standard or daylight time as specified. If - * the name is not available, the result is in the format {@code GMT[+-]hh:mm}. - * - * @param daylightTime - * {@code true} for daylight time, {@code false} for standard - * time. - * @param style - * either {@code LONG} or {@code SHORT}. - * @return the {@code TimeZone} name. - */ public final String getDisplayName(boolean daylightTime, int style) { - return getDisplayName(daylightTime, style, Locale.getDefault()); + return getDisplayName(daylightTime, style, TLocale.getDefault()); } - /** - * Gets the specified style of name ({@code LONG} or {@code SHORT}) for this {@code TimeZone} for - * the specified {@code Locale} in either standard or daylight time as specified. If - * the name is not available, the result is in the format {@code GMT[+-]hh:mm}. - * - * @param daylightTime - * {@code true} for daylight time, {@code false} for standard - * time. - * @param style - * either LONG or SHORT. - * @param locale - * either {@code LONG} or {@code SHORT}. - * @return the {@code TimeZone} name. - */ - public String getDisplayName(boolean daylightTime, int style, Locale locale) { - if(icuTimeZone == null || !ID.equals(icuTimeZone.getID())){ + 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); + return icuTimeZone.getDisplayName(daylightTime, style, locale); } - /** - * Gets the ID of this {@code TimeZone}. - * - * @return the time zone ID string. - */ public String getID() { return ID; } - /** - * Gets the daylight savings offset in milliseconds for this {@code TimeZone}. - *

- * This implementation returns 3600000 (1 hour), or 0 if the time zone does - * not observe daylight savings. - *

- * Subclasses may override to return daylight savings values other than 1 - * hour. - *

- * - * @return the daylight savings offset in milliseconds if this {@code TimeZone} - * observes daylight savings, zero otherwise. - */ public int getDSTSavings() { if (useDaylightTime()) { return 3600000; @@ -210,15 +124,6 @@ public abstract class TimeZone implements TSerializable, TCloneable { return 0; } - /** - * Gets the offset from GMT of this {@code TimeZone} for the specified date. The - * offset includes daylight savings time if the specified date is within the - * daylight savings time period. - * - * @param time - * the date in milliseconds since January 1, 1970 00:00:00 GMT - * @return the offset from GMT in milliseconds. - */ public int getOffset(long time) { if (inDaylightTime(new Date(time))) { return getRawOffset() + getDSTSavings(); @@ -226,54 +131,16 @@ public abstract class TimeZone implements TSerializable, TCloneable { return getRawOffset(); } - /** - * Gets the offset from GMT of this {@code TimeZone} for the specified date and - * time. The offset includes daylight savings time if the specified date and - * time are within the daylight savings time period. - * - * @param era - * the {@code GregorianCalendar} era, either {@code GregorianCalendar.BC} or - * {@code GregorianCalendar.AD}. - * @param year - * the year. - * @param month - * the {@code Calendar} month. - * @param day - * the day of the month. - * @param dayOfWeek - * the {@code Calendar} day of the week. - * @param time - * the time of day in milliseconds. - * @return the offset from GMT in milliseconds. - */ - abstract public int getOffset(int era, int year, int month, int day, - int dayOfWeek, int time); + abstract public int getOffset(int era, int year, int month, int day, int dayOfWeek, int time); - /** - * Gets the offset for standard time from GMT for this {@code TimeZone}. - * - * @return the offset from GMT in milliseconds. - */ abstract public int getRawOffset(); - /** - * Gets the {@code TimeZone} with the specified ID. - * - * @param name - * a time zone string ID. - * @return the {@code TimeZone} with the specified ID or null if no {@code TimeZone} with - * the specified ID exists. - */ public static synchronized TimeZone getTimeZone(String name) { if (AvailableZones == null) { initializeAvailable(); } TimeZone zone = AvailableZones.get(name); - if(zone == null && isAvailableIDInICU(name)){ - appendAvailableZones(name); - zone = AvailableZones.get(name); - } if (zone == null) { if (name.startsWith("GMT") && name.length() > 3) { char sign = name.charAt(3); @@ -287,10 +154,8 @@ public abstract class TimeZone implements TSerializable, TCloneable { 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 (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(); } @@ -339,15 +204,6 @@ public abstract class TimeZone implements TSerializable, TCloneable { return buf.toString(); } - /** - * Returns whether the specified {@code TimeZone} has the same raw offset as this - * {@code TimeZone}. - * - * @param zone - * a {@code TimeZone}. - * @return {@code true} when the {@code TimeZone} have the same raw offset, {@code false} - * otherwise. - */ public boolean hasSameRules(TimeZone zone) { if (zone == null) { return false; @@ -355,21 +211,11 @@ public abstract class TimeZone implements TSerializable, TCloneable { return getRawOffset() == zone.getRawOffset(); } - /** - * Returns whether the specified {@code Date} is in the daylight savings time period for - * this {@code TimeZone}. - * - * @param time - * a {@code Date}. - * @return {@code true} when the {@code Date} is in the daylight savings time period, {@code false} - * otherwise. - */ 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) { + while (index < length && (digit = Character.digit(string.charAt(index), 10)) != -1) { index++; result = result * 10 + digit; } @@ -377,15 +223,6 @@ public abstract class TimeZone implements TSerializable, TCloneable { return result; } - /** - * Sets the default time zone. If passed {@code null}, then the next - * time {@link #getDefault} is called, the default time zone will be - * determined. This behavior is slightly different than the canonical - * description of this method, but it follows the spirit of it. - * - * @param timezone - * a {@code TimeZone} object. - */ public static synchronized void setDefault(TimeZone timezone) { if (timezone != null) { setICUDefaultTimeZone(timezone); @@ -393,8 +230,7 @@ public abstract class TimeZone implements TSerializable, TCloneable { return; } - String zone = AccessController.doPrivileged(new PriviAction( - "user.timezone")); + 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")) { @@ -413,15 +249,14 @@ public abstract class TimeZone implements TSerializable, TCloneable { 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]); + 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 @@ -435,32 +270,23 @@ public abstract class TimeZone implements TSerializable, TCloneable { } private static void setICUDefaultTimeZone(TimeZone timezone) { - final com.ibm.icu.util.TimeZone icuTZ = com.ibm.icu.util.TimeZone - .getTimeZone(timezone.getID()); + final com.ibm.icu.util.TimeZone icuTZ = com.ibm.icu.util.TimeZone.getTimeZone(timezone.getID()); - AccessController - .doPrivileged(new PrivilegedAction() { - public java.lang.reflect.Field run() { - java.lang.reflect.Field field = null; - try { - field = com.ibm.icu.util.TimeZone.class - .getDeclaredField("defaultZone"); - field.setAccessible(true); - field.set("defaultZone", icuTZ); - } catch (Exception e) { - return null; - } - return field; - } - }); + AccessController.doPrivileged(new PrivilegedAction() { + public java.lang.reflect.Field run() { + java.lang.reflect.Field field = null; + try { + field = com.ibm.icu.util.TimeZone.class.getDeclaredField("defaultZone"); + field.setAccessible(true); + field.set("defaultZone", icuTZ); + } catch (Exception e) { + return null; + } + return field; + } + }); } - /** - * Sets the ID of this {@code TimeZone}. - * - * @param name - * a string which is the time zone ID. - */ public void setID(String name) { if (name == null) { throw new NullPointerException(); @@ -468,42 +294,9 @@ public abstract class TimeZone implements TSerializable, TCloneable { ID = name; } - /** - * Sets the offset for standard time from GMT for this {@code TimeZone}. - * - * @param offset - * the offset from GMT in milliseconds. - */ abstract public void setRawOffset(int offset); - /** - * Returns whether this {@code TimeZone} has a daylight savings time period. - * - * @return {@code true} if this {@code TimeZone} has a daylight savings time period, {@code false} - * otherwise. - */ abstract public boolean useDaylightTime(); - /** - * Gets the name and the details of the user-selected TimeZone on the - * device. - * - * @param tzinfo - * int array of 10 elements to be filled with the TimeZone - * information. Once filled, the contents of the array are - * formatted as follows: tzinfo[0] -> the timezone offset; - * tzinfo[1] -> the dst adjustment; tzinfo[2] -> the dst start - * hour; tzinfo[3] -> the dst start day of week; tzinfo[4] -> the - * dst start week of month; tzinfo[5] -> the dst start month; - * tzinfo[6] -> the dst end hour; tzinfo[7] -> the dst end day of - * week; tzinfo[8] -> the dst end week of month; tzinfo[9] -> the - * dst end month; - * @param isCustomTimeZone - * boolean array of size 1 that indicates if a timezone match is - * found - * @return the name of the TimeZone or null if error occurs in native - * method. - */ - private static native String getCustomTimeZone(int[] tzinfo, - boolean[] isCustomTimeZone); + private static native String getCustomTimeZone(int[] tzinfo, boolean[] isCustomTimeZone); }