Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 48464 invoked from network); 27 Nov 2007 12:52:54 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 27 Nov 2007 12:52:54 -0000 Received: (qmail 63802 invoked by uid 500); 27 Nov 2007 12:52:41 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 63785 invoked by uid 500); 27 Nov 2007 12:52:41 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 63776 invoked by uid 99); 27 Nov 2007 12:52:41 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 27 Nov 2007 04:52:41 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 27 Nov 2007 12:52:46 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 0C6101A9832; Tue, 27 Nov 2007 04:52:24 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r598620 - /harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Calendar.java Date: Tue, 27 Nov 2007 12:52:23 -0000 To: commits@harmony.apache.org From: tellison@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071127125224.0C6101A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: tellison Date: Tue Nov 27 04:52:19 2007 New Revision: 598620 URL: http://svn.apache.org/viewvc?rev=598620&view=rev Log: Code formatting. Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Calendar.java Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Calendar.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Calendar.java?rev=598620&r1=598619&r2=598620&view=diff ============================================================================== --- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Calendar.java (original) +++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Calendar.java Tue Nov 27 04:52:19 2007 @@ -17,7 +17,6 @@ package java.util; - import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -35,814 +34,819 @@ * @see TimeZone */ public abstract class Calendar implements Serializable, Cloneable, - Comparable { + Comparable { - private static final long serialVersionUID = -1807547505821590642L; + private static final long serialVersionUID = -1807547505821590642L; - /** - * Set to true when the calendar fields have been set from the time, set to - * false when a field is changed and the fields must be recomputed. - */ - protected boolean areFieldsSet; - - /** - * An integer array of calendar fields. - */ - protected int[] fields; - - /* - * A boolean array. Each element indicates if the corresponding field has - * been set. - */ - protected boolean[] isSet; - - /** - * Set to true when the time has been set, set to 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; - - transient int lastDateFieldSet; - - private boolean lenient; - - private int firstDayOfWeek; - - private int minimalDaysInFirstWeek; - - private TimeZone zone; - - public static final int JANUARY = 0, FEBRUARY = 1, MARCH = 2, APRIL = 3, - MAY = 4, JUNE = 5, JULY = 6, AUGUST = 7, SEPTEMBER = 8, - OCTOBER = 9, NOVEMBER = 10, DECEMBER = 11, UNDECIMBER = 12, - - SUNDAY = 1, MONDAY = 2, TUESDAY = 3, WEDNESDAY = 4, THURSDAY = 5, - FRIDAY = 6, SATURDAY = 7; - - public static final int ERA = 0, YEAR = 1, MONTH = 2, WEEK_OF_YEAR = 3, - WEEK_OF_MONTH = 4, DATE = 5, DAY_OF_MONTH = 5, DAY_OF_YEAR = 6, - DAY_OF_WEEK = 7, DAY_OF_WEEK_IN_MONTH = 8, - - AM_PM = 9, HOUR = 10, HOUR_OF_DAY = 11, MINUTE = 12, SECOND = 13, - MILLISECOND = 14, ZONE_OFFSET = 15, DST_OFFSET = 16, - - FIELD_COUNT = 17, - - AM = 0, PM = 1; - - private static String[] fieldNames = { "ERA=", "YEAR=", "MONTH=", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - "WEEK_OF_YEAR=", "WEEK_OF_MONTH=", "DAY_OF_MONTH=", "DAY_OF_YEAR=", //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - "DAY_OF_WEEK=", "DAY_OF_WEEK_IN_MONTH=", "AM_PM=", "HOUR=", //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ - "HOUR_OF_DAY", "MINUTE=", "SECOND=", "MILLISECOND=", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - "ZONE_OFFSET=", "DST_OFFSET=" }; //$NON-NLS-1$ //$NON-NLS-2$ - - /** - * Initializes this Calendar instance using the default TimeZone and Locale. - * - */ - protected Calendar() { - this(TimeZone.getDefault(), Locale.getDefault()); - } - - Calendar(TimeZone timezone) { - fields = new int[FIELD_COUNT]; - isSet = new boolean[FIELD_COUNT]; - areFieldsSet = isTimeSet = false; - setLenient(true); - setTimeZone(timezone); - } - - /** - * Initializes this Calendar instance using the specified TimeZone and - * Locale. - * - * @param timezone - * the timezone - * @param locale - * the locale - */ - protected Calendar(TimeZone timezone, Locale locale) { - this(timezone); - ResourceBundle bundle = Locale.getBundle("Locale", locale); //$NON-NLS-1$ - setFirstDayOfWeek(((Integer) bundle.getObject("First_Day")).intValue()); //$NON-NLS-1$ - setMinimalDaysInFirstWeek(((Integer) bundle.getObject("Minimal_Days")) //$NON-NLS-1$ - .intValue()); - } - - /** - * Adds the specified amount to a Calendar field. - * - * @param field - * the Calendar field to modify - * @param value - * the amount to add to the field - * - * @exception IllegalArgumentException - * when the specified field is DST_OFFSET or ZONE_OFFSET. - */ - abstract public void add(int field, int value); - - /** - * Answers if the Date specified by this Calendar instance is after the Date - * specified by the parameter. The comparison is not dependent on the - * time zones of the Calendars. - * - * @param calendar - * the Calendar instance to compare - * @return true when this Calendar is after calendar, false otherwise - * - * @exception IllegalArgumentException - * when 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)) { + /** + * Set to true when the calendar fields have been set from the time, set to + * false when a field is changed and the fields must be recomputed. + */ + protected boolean areFieldsSet; + + /** + * An integer array of calendar fields. + */ + protected int[] fields; + + /* + * A boolean array. Each element indicates if the corresponding field has + * been set. + */ + protected boolean[] isSet; + + /** + * Set to true when the time has been set, set to 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; + + transient int lastDateFieldSet; + + private boolean lenient; + + private int firstDayOfWeek; + + private int minimalDaysInFirstWeek; + + private TimeZone zone; + + public static final int JANUARY = 0, FEBRUARY = 1, MARCH = 2, APRIL = 3, + MAY = 4, JUNE = 5, JULY = 6, AUGUST = 7, SEPTEMBER = 8, + OCTOBER = 9, NOVEMBER = 10, DECEMBER = 11, UNDECIMBER = 12, + + SUNDAY = 1, MONDAY = 2, TUESDAY = 3, WEDNESDAY = 4, THURSDAY = 5, + FRIDAY = 6, SATURDAY = 7; + + public static final int ERA = 0, YEAR = 1, MONTH = 2, WEEK_OF_YEAR = 3, + WEEK_OF_MONTH = 4, DATE = 5, DAY_OF_MONTH = 5, DAY_OF_YEAR = 6, + DAY_OF_WEEK = 7, DAY_OF_WEEK_IN_MONTH = 8, + + AM_PM = 9, HOUR = 10, HOUR_OF_DAY = 11, MINUTE = 12, SECOND = 13, + MILLISECOND = 14, ZONE_OFFSET = 15, DST_OFFSET = 16, + + FIELD_COUNT = 17, + + AM = 0, PM = 1; + + private static String[] fieldNames = { "ERA=", "YEAR=", "MONTH=", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "WEEK_OF_YEAR=", "WEEK_OF_MONTH=", "DAY_OF_MONTH=", "DAY_OF_YEAR=", //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + "DAY_OF_WEEK=", "DAY_OF_WEEK_IN_MONTH=", "AM_PM=", "HOUR=", //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ + "HOUR_OF_DAY", "MINUTE=", "SECOND=", "MILLISECOND=", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + "ZONE_OFFSET=", "DST_OFFSET=" }; //$NON-NLS-1$ //$NON-NLS-2$ + + /** + * Initializes this Calendar instance using the default TimeZone and Locale. + * + */ + protected Calendar() { + this(TimeZone.getDefault(), Locale.getDefault()); + } + + Calendar(TimeZone timezone) { + fields = new int[FIELD_COUNT]; + isSet = new boolean[FIELD_COUNT]; + areFieldsSet = isTimeSet = false; + setLenient(true); + setTimeZone(timezone); + } + + /** + * Initializes this Calendar instance using the specified TimeZone and + * Locale. + * + * @param timezone + * the timezone + * @param locale + * the locale + */ + protected Calendar(TimeZone timezone, Locale locale) { + this(timezone); + ResourceBundle bundle = Locale.getBundle("Locale", locale); //$NON-NLS-1$ + setFirstDayOfWeek(((Integer) bundle.getObject("First_Day")).intValue()); //$NON-NLS-1$ + setMinimalDaysInFirstWeek(((Integer) bundle.getObject("Minimal_Days")) //$NON-NLS-1$ + .intValue()); + } + + /** + * Adds the specified amount to a Calendar field. + * + * @param field + * the Calendar field to modify + * @param value + * the amount to add to the field + * + * @exception IllegalArgumentException + * when the specified field is DST_OFFSET or ZONE_OFFSET. + */ + abstract public void add(int field, int value); + + /** + * Answers if the Date specified by this Calendar instance is after the Date + * specified by the parameter. The comparison is not dependent on the time + * zones of the Calendars. + * + * @param calendar + * the Calendar instance to compare + * @return true when this Calendar is after calendar, false otherwise + * + * @exception IllegalArgumentException + * when 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; } - return getTimeInMillis() > ((Calendar) calendar).getTimeInMillis(); - } + return getTimeInMillis() > ((Calendar) calendar).getTimeInMillis(); + } - /** - * Answers if the Date specified by this Calendar instance is before the - * Date specified by the parameter. The comparison is not dependent on the - * time zones of the Calendars. - * - * @param calendar - * the Calendar instance to compare - * @return true when this Calendar is before calendar, false otherwise - * - * @exception IllegalArgumentException - * when 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)) { + /** + * Answers if the Date specified by this Calendar instance is before the + * Date specified by the parameter. The comparison is not dependent on the + * time zones of the Calendars. + * + * @param calendar + * the Calendar instance to compare + * @return true when this Calendar is before calendar, false otherwise + * + * @exception IllegalArgumentException + * when 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; } - return getTimeInMillis() < ((Calendar) calendar).getTimeInMillis(); - } + return getTimeInMillis() < ((Calendar) calendar).getTimeInMillis(); + } + + /** + * Clears all of the fields of this Calendar. All fields are initialized to + * zero. + * + */ + public final void clear() { + for (int i = 0; i < FIELD_COUNT; i++) { + fields[i] = 0; + isSet[i] = false; + } + areFieldsSet = isTimeSet = false; + } - /** - * Clears all of the fields of this Calendar. All fields are initialized to - * zero. - * - */ - public final void clear() { - for (int i = 0; i < FIELD_COUNT; i++) { - fields[i] = 0; - isSet[i] = false; - } - areFieldsSet = isTimeSet = false; - } - - /** - * Clears the specified field to zero. - * - * @param field - * the field to clear - */ - public final void clear(int field) { - fields[field] = 0; - isSet[field] = false; - areFieldsSet = isTimeSet = false; - } - - /** - * Answers a new Calendar with the same properties. - * - * @return a shallow copy of this Calendar - * - * @see java.lang.Cloneable - */ - @Override + /** + * Clears the specified field to zero. + * + * @param field + * the field to clear + */ + public final void clear(int field) { + fields[field] = 0; + isSet[field] = false; + areFieldsSet = isTimeSet = false; + } + + /** + * Answers a new Calendar with the same properties. + * + * @return a shallow copy of this Calendar + * + * @see java.lang.Cloneable + */ + @Override public Object clone() { - try { - Calendar clone = (Calendar) super.clone(); - clone.fields = fields.clone(); - clone.isSet = isSet.clone(); - clone.zone = (TimeZone) zone.clone(); - return clone; - } catch (CloneNotSupportedException e) { - return null; - } - } - - /** - * 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. - * - * @exception IllegalArgumentException - * when the time is not set and the time cannot be computed - * from the current field values - */ - protected void complete() { - if (!isTimeSet) { - computeTime(); - isTimeSet = true; - } - if (!areFieldsSet) { - computeFields(); - areFieldsSet = true; - } - } - - /** - * Computes the Calendar fields from the time. - * - */ - protected abstract void computeFields(); - - /** - * Computes the time from the Calendar fields. - * - * @exception IllegalArgumentException - * when the time cannot be computed from the current field - * values - */ - protected abstract void computeTime(); - - /** - * Compares the specified object to this Calendar and answer if they are - * equal. The object must be an instance of Calendar and have the same - * properties. - * - * @param object - * the object to compare with this object - * @return true if the specified object is equal to this Calendar, false - * otherwise - */ - @Override + try { + Calendar clone = (Calendar) super.clone(); + clone.fields = fields.clone(); + clone.isSet = isSet.clone(); + clone.zone = (TimeZone) zone.clone(); + return clone; + } catch (CloneNotSupportedException e) { + return null; + } + } + + /** + * 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. + * + * @exception IllegalArgumentException + * when the time is not set and the time cannot be computed + * from the current field values + */ + protected void complete() { + if (!isTimeSet) { + computeTime(); + isTimeSet = true; + } + if (!areFieldsSet) { + computeFields(); + areFieldsSet = true; + } + } + + /** + * Computes the Calendar fields from the time. + * + */ + protected abstract void computeFields(); + + /** + * Computes the time from the Calendar fields. + * + * @exception IllegalArgumentException + * when the time cannot be computed from the current field + * values + */ + protected abstract void computeTime(); + + /** + * Compares the specified object to this Calendar and answer if they are + * equal. The object must be an instance of Calendar and have the same + * properties. + * + * @param object + * the object to compare with this object + * @return true if the specified object is equal to this Calendar, false + * otherwise + */ + @Override public boolean equals(Object object) { - if (this == object) { + if (this == object) { return true; } - if (!(object instanceof Calendar)) { + if (!(object instanceof Calendar)) { return false; } - Calendar cal = (Calendar) object; - 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 - * from the time if required. - * - * @param field - * the field - * @return the value of the specified field - * - * @exception IllegalArgumentException - * when the fields are not set, the time is not set, and the - * time cannot be computed from the current field values - */ - 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))) { + Calendar cal = (Calendar) object; + 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 + * from the time if required. + * + * @param field + * the field + * @return the value of the specified field + * + * @exception IllegalArgumentException + * when the fields are not set, the time is not set, and the + * time cannot be computed from the current field values + */ + 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))) { return next; } - complete(); - long orgTime = time; - set(field, next); - do { - value = next; - roll(field, true); - next = get(field); - } while (next > value); - time = orgTime; - areFieldsSet = false; - 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))) { + complete(); + long orgTime = time; + set(field, next); + do { + value = next; + roll(field, true); + next = get(field); + } while (next > value); + time = orgTime; + areFieldsSet = false; + 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))) { return next; } - complete(); - long orgTime = time; - set(field, next); - do { - value = next; - roll(field, false); - next = get(field); - } while (next < value); - time = orgTime; - areFieldsSet = false; - return value; - } - - /** - * Gets the list of installed Locales which support Calendar. - * - * @return an array of Locale - */ - public static synchronized Locale[] getAvailableLocales() { - return Locale.getAvailableLocales(); - } - - /** - * Gets the first day of the week for this Calendar. - * - * @return a Calendar day of the week - */ - public int getFirstDayOfWeek() { - return firstDayOfWeek; - } - - /** - * Gets the greatest minimum value of the specified field. - * - * @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 Calendar subclass appropriate for the - * default Locale. - * - * @return a Calendar subclass instance set to the current date and time in - * the default timezone - */ - public static synchronized Calendar getInstance() { - return new GregorianCalendar(); - } - - /** - * Constructs a new instance of the Calendar subclass appropriate for the - * specified Locale. - * - * @param locale - * the locale to use - * @return a Calendar subclass instance set to the current date and time - */ - public static synchronized Calendar getInstance(Locale locale) { - return new GregorianCalendar(locale); - } - - /** - * Constructs a new instance of the Calendar subclass appropriate for the - * default Locale, using the specified TimeZone. - * - * @param timezone - * the timezone to use - * @return a 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 Calendar subclass appropriate for the - * specified Locale. - * - * @param timezone - * the timezone to use - * @param locale - * the locale to use - * @return a Calendar subclass instance set to the current date and time in - * the specified timezone - */ - public static synchronized Calendar getInstance(TimeZone timezone, - Locale locale) { - return new GregorianCalendar(timezone, locale); - } - - /** - * Gets the smallest maximum value of the specified field. - * - * @param field - * the field - * @return the smallest maximum value of the specified field - */ - abstract public int getLeastMaximum(int field); - - /** - * Gets the greatest maximum value of 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. - * - * @param field - * the field - * @return the smallest minimum value of the specified field - */ - abstract public int getMinimum(int field); - - /** - * Gets the time of this Calendar as a Date object. - * - * @return a new Date initialized to the time of this Calendar - * - * @exception IllegalArgumentException - * when 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 answers the time. - * - * @return the time of this Calendar - * - * @exception IllegalArgumentException - * when the time is not set and the time cannot be computed - * from the current field values - */ - public long getTimeInMillis() { - if (!isTimeSet) { - computeTime(); - isTimeSet = true; - } - return time; - } - - /** - * Gets the timezone of this Calendar. - * - * @return the timezone used by this Calendar - */ - public TimeZone getTimeZone() { - return zone; - } - - /** - * Answers an integer hash code for the receiver. Objects which are equal - * answer the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override + complete(); + long orgTime = time; + set(field, next); + do { + value = next; + roll(field, false); + next = get(field); + } while (next < value); + time = orgTime; + areFieldsSet = false; + return value; + } + + /** + * Gets the list of installed Locales which support Calendar. + * + * @return an array of Locale + */ + public static synchronized Locale[] getAvailableLocales() { + return Locale.getAvailableLocales(); + } + + /** + * Gets the first day of the week for this Calendar. + * + * @return a Calendar day of the week + */ + public int getFirstDayOfWeek() { + return firstDayOfWeek; + } + + /** + * Gets the greatest minimum value of the specified field. + * + * @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 Calendar subclass appropriate for the + * default Locale. + * + * @return a Calendar subclass instance set to the current date and time in + * the default timezone + */ + public static synchronized Calendar getInstance() { + return new GregorianCalendar(); + } + + /** + * Constructs a new instance of the Calendar subclass appropriate for the + * specified Locale. + * + * @param locale + * the locale to use + * @return a Calendar subclass instance set to the current date and time + */ + public static synchronized Calendar getInstance(Locale locale) { + return new GregorianCalendar(locale); + } + + /** + * Constructs a new instance of the Calendar subclass appropriate for the + * default Locale, using the specified TimeZone. + * + * @param timezone + * the timezone to use + * @return a 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 Calendar subclass appropriate for the + * specified Locale. + * + * @param timezone + * the timezone to use + * @param locale + * the locale to use + * @return a Calendar subclass instance set to the current date and time in + * the specified timezone + */ + public static synchronized Calendar getInstance(TimeZone timezone, + Locale locale) { + return new GregorianCalendar(timezone, locale); + } + + /** + * Gets the smallest maximum value of the specified field. + * + * @param field + * the field + * @return the smallest maximum value of the specified field + */ + abstract public int getLeastMaximum(int field); + + /** + * Gets the greatest maximum value of 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. + * + * @param field + * the field + * @return the smallest minimum value of the specified field + */ + abstract public int getMinimum(int field); + + /** + * Gets the time of this Calendar as a Date object. + * + * @return a new Date initialized to the time of this Calendar + * + * @exception IllegalArgumentException + * when 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 answers the time. + * + * @return the time of this Calendar + * + * @exception IllegalArgumentException + * when the time is not set and the time cannot be computed + * from the current field values + */ + public long getTimeInMillis() { + if (!isTimeSet) { + computeTime(); + isTimeSet = true; + } + return time; + } + + /** + * Gets the timezone of this Calendar. + * + * @return the timezone used by this Calendar + */ + public TimeZone getTimeZone() { + return zone; + } + + /** + * Answers an integer hash code for the receiver. Objects which are equal + * answer 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(); - } - - /** - * 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]; - } - - /** - * Answers if this Calendar accepts field values which are outside the valid - * range for the field. - * - * @return true if this Calendar is lenient, false otherwise - */ - public boolean isLenient() { - return lenient; - } - - /** - * Answers if the specified field is set. - * - * @param field - * a calendar field - * @return true if the specified field is set, false otherwise - */ - public final boolean isSet(int field) { - return isSet[field]; - } - - /** - * Adds the specified amount 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 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; - for (int i = 0; i < count; i++) { + 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]; + } + + /** + * Answers if this Calendar accepts field values which are outside the valid + * range for the field. + * + * @return true if this Calendar is lenient, false otherwise + */ + public boolean isLenient() { + return lenient; + } + + /** + * Answers if the specified field is set. + * + * @param field + * a calendar field + * @return true if the specified field is set, false otherwise + */ + public final boolean isSet(int field) { + return isSet[field]; + } + + /** + * Adds the specified amount 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 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; + for (int i = 0; i < count; i++) { roll(field, increment); } - } + } - /** - * 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 field to roll - * @param increment - * true to increment the field, false to decrement - */ - abstract public void roll(int field, boolean increment); - - /** - * Sets a field to the specified value. - * - * @param field - * the Calendar field to modify - * @param value - * the value - */ - public void set(int field, int value) { - fields[field] = value; - isSet[field] = true; - areFieldsSet = isTimeSet = false; - if (field > MONTH && field < AM_PM) { + /** + * 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 field to roll + * @param increment + * true to increment the field, false to decrement + */ + abstract public void roll(int field, boolean increment); + + /** + * Sets a field to the specified value. + * + * @param field + * the Calendar field to modify + * @param value + * the value + */ + public void set(int field, int value) { + fields[field] = value; + isSet[field] = true; + areFieldsSet = isTimeSet = false; + if (field > MONTH && field < AM_PM) { lastDateFieldSet = field; } - if (field == HOUR || field == HOUR_OF_DAY) { + if (field == HOUR || field == HOUR_OF_DAY) { lastTimeFieldSet = field; } if (field == AM_PM) { lastTimeFieldSet = HOUR; } - } + } + + /** + * Sets the year, month and day of the month fields. + * + * @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. + * + * @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) { + 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. + * + * @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) { + set(year, month, day, hourOfDay, minute); + set(SECOND, second); + } + + /** + * Sets the first day of the week for this Calendar. + * + * @param value + * a Calendar day of the week + */ + public void setFirstDayOfWeek(int value) { + firstDayOfWeek = value; + } + + /** + * Sets this 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 Calendar. + * + * @param date + * a Date object + */ + public final void setTime(Date date) { + setTimeInMillis(date.getTime()); + } + + /** + * Sets the time of this 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; + isTimeSet = true; + areFieldsSet = false; + complete(); + } + } - /** - * Sets the year, month and day of the month fields. - * - * @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. - * - * @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) { - 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. - * - * @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) { - set(year, month, day, hourOfDay, minute); - set(SECOND, second); - } - - /** - * Sets the first day of the week for this Calendar. - * - * @param value - * a Calendar day of the week - */ - public void setFirstDayOfWeek(int value) { - firstDayOfWeek = value; - } - - /** - * Sets this 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 Calendar. - * - * @param date - * a Date object - */ - public final void setTime(Date date) { - setTimeInMillis(date.getTime()); - } - - /** - * Sets the time of this 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; - isTimeSet = true; - areFieldsSet = false; - complete(); - } - } - - /** - * Sets the timezone used by this Calendar. - * - * @param timezone - * a TimeZone - */ - public void setTimeZone(TimeZone timezone) { - zone = timezone; - areFieldsSet = false; - } - - /** - * Answers the string representation of this Calendar. - * - * @return the string representation of this Calendar - */ - @Override + /** + * Sets the timezone used by this Calendar. + * + * @param timezone + * a TimeZone + */ + public void setTimeZone(TimeZone timezone) { + zone = timezone; + areFieldsSet = false; + } + + /** + * Answers the string representation of this Calendar. + * + * @return the string representation of this Calendar + */ + @Override + @SuppressWarnings("nls") public String toString() { - StringBuffer result = new StringBuffer(getClass().getName() + "[time=" //$NON-NLS-1$ - + (isTimeSet ? String.valueOf(time) : "?") + ",areFieldsSet=" //$NON-NLS-1$//$NON-NLS-2$ - + areFieldsSet + - // ",areAllFieldsSet=" + areAllFieldsSet + - ",lenient=" + lenient + ",zone=" + zone + ",firstDayOfWeek=" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - + firstDayOfWeek + ",minimalDaysInFirstWeek=" //$NON-NLS-1$ - + minimalDaysInFirstWeek); - for (int i = 0; i < FIELD_COUNT; i++) { - result.append(','); - result.append(fieldNames[i]); - result.append('='); - if (isSet[i]) { + StringBuffer result = new StringBuffer(getClass().getName() + "[time=" + + (isTimeSet ? String.valueOf(time) : "?") + + ",areFieldsSet=" + + areFieldsSet + + // ",areAllFieldsSet=" + areAllFieldsSet + + ",lenient=" + lenient + ",zone=" + zone + ",firstDayOfWeek=" + + firstDayOfWeek + ",minimalDaysInFirstWeek=" + + minimalDaysInFirstWeek); + for (int i = 0; i < FIELD_COUNT; i++) { + result.append(','); + result.append(fieldNames[i]); + result.append('='); + if (isSet[i]) { result.append(fields[i]); } else { result.append('?'); } - } - result.append(']'); - return result.toString(); - } - - /** - * Compares the times of the two Calendars, which represent the milliseconds - * from the January 1, 1970 00:00:00.000 GMT (Gregorian). - * - * @param anotherCalendar - * another calendar that is compared with. - * @return 0 if the times of the two calendar are equal, -1 if the time of - * this calendar is before the other one, 1 if the time of this - * calendar is after the other one. - * @throws NullPointerException - * if the argument of calendar is null. - * @throws IllegalArgumentException - * if the argument of the calendar does not include a valid time - * value. - */ - public int compareTo(Calendar anotherCalendar) { - if (null == anotherCalendar) { - throw new NullPointerException(); - } - long timeInMillis = getTimeInMillis(); - long anotherTimeInMillis = anotherCalendar.getTimeInMillis(); - if (timeInMillis > anotherTimeInMillis) { - return 1; - } - if (timeInMillis == anotherTimeInMillis) { - return 0; - } - return -1; - } - - private static final ObjectStreamField[] serialPersistentFields = { - new ObjectStreamField("areFieldsSet", Boolean.TYPE), //$NON-NLS-1$ - new ObjectStreamField("fields", int[].class), //$NON-NLS-1$ - new ObjectStreamField("firstDayOfWeek", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("isSet", boolean[].class), //$NON-NLS-1$ - new ObjectStreamField("isTimeSet", Boolean.TYPE), //$NON-NLS-1$ - new ObjectStreamField("lenient", Boolean.TYPE), //$NON-NLS-1$ - new ObjectStreamField("minimalDaysInFirstWeek", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("nextStamp", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("serialVersionOnStream", Integer.TYPE), //$NON-NLS-1$ - new ObjectStreamField("time", Long.TYPE), //$NON-NLS-1$ - new ObjectStreamField("zone", TimeZone.class), }; //$NON-NLS-1$ - - private void writeObject(ObjectOutputStream stream) throws IOException { - complete(); - ObjectOutputStream.PutField putFields = stream.putFields(); - putFields.put("areFieldsSet", areFieldsSet); //$NON-NLS-1$ - putFields.put("fields", this.fields); //$NON-NLS-1$ - putFields.put("firstDayOfWeek", firstDayOfWeek); //$NON-NLS-1$ - putFields.put("isSet", isSet); //$NON-NLS-1$ - putFields.put("isTimeSet", isTimeSet); //$NON-NLS-1$ - putFields.put("lenient", lenient); //$NON-NLS-1$ - putFields.put("minimalDaysInFirstWeek", minimalDaysInFirstWeek); //$NON-NLS-1$ - putFields.put("nextStamp", 2 /* MINIMUM_USER_STAMP */); //$NON-NLS-1$ - putFields.put("serialVersionOnStream", 1); //$NON-NLS-1$ - putFields.put("time", time); //$NON-NLS-1$ - putFields.put("zone", zone); //$NON-NLS-1$ - stream.writeFields(); - } - - private void readObject(ObjectInputStream stream) throws IOException, - ClassNotFoundException { - ObjectInputStream.GetField readFields = stream.readFields(); - areFieldsSet = readFields.get("areFieldsSet", false); //$NON-NLS-1$ - this.fields = (int[]) readFields.get("fields", null); //$NON-NLS-1$ - firstDayOfWeek = readFields.get("firstDayOfWeek", Calendar.SUNDAY); //$NON-NLS-1$ - isSet = (boolean[]) readFields.get("isSet", null); //$NON-NLS-1$ - isTimeSet = readFields.get("isTimeSet", false); //$NON-NLS-1$ - lenient = readFields.get("lenient", true); //$NON-NLS-1$ - minimalDaysInFirstWeek = readFields.get("minimalDaysInFirstWeek", 1); //$NON-NLS-1$ - time = readFields.get("time", 0L); //$NON-NLS-1$ - zone = (TimeZone) readFields.get("zone", null); //$NON-NLS-1$ - } + } + result.append(']'); + return result.toString(); + } + + /** + * Compares the times of the two Calendars, which represent the milliseconds + * from the January 1, 1970 00:00:00.000 GMT (Gregorian). + * + * @param anotherCalendar + * another calendar that is compared with. + * @return 0 if the times of the two calendar are equal, -1 if the time of + * this calendar is before the other one, 1 if the time of this + * calendar is after the other one. + * @throws NullPointerException + * if the argument of calendar is null. + * @throws IllegalArgumentException + * if the argument of the calendar does not include a valid time + * value. + */ + public int compareTo(Calendar anotherCalendar) { + if (null == anotherCalendar) { + throw new NullPointerException(); + } + long timeInMillis = getTimeInMillis(); + long anotherTimeInMillis = anotherCalendar.getTimeInMillis(); + if (timeInMillis > anotherTimeInMillis) { + return 1; + } + if (timeInMillis == anotherTimeInMillis) { + return 0; + } + 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); + } }