From cfa2da67d8f8895f68d19423d5d379cf72038a93 Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Fri, 13 Apr 2007 13:05:39 +0000 Subject: 2007-04-13 Gary Benson * java/util/GregorianCalendar.java (defaults): Moved from within setDefaultFields. (setDefaultFields): Only set fields that are undefined. --- ChangeLog | 6 ++++++ java/util/GregorianCalendar.java | 26 +++++++++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 94c219149..e6f621912 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-04-13 Gary Benson + + * java/util/GregorianCalendar.java + (defaults): Moved from within setDefaultFields. + (setDefaultFields): Only set fields that are undefined. + 2007-04-13 Gary Benson * java/util/Calendar.java diff --git a/java/util/GregorianCalendar.java b/java/util/GregorianCalendar.java index 8cfadc3d4..bd5e6897b 100644 --- a/java/util/GregorianCalendar.java +++ b/java/util/GregorianCalendar.java @@ -495,18 +495,30 @@ public class GregorianCalendar extends Calendar throw new IllegalArgumentException("Illegal DST_OFFSET."); } + // Default values for all fields, except DAY_OF_WEEK which + // defaults to getFirstDayOfWeek(). Note that according to + // the spec DAY_OF_WEEK_IN_MONTH defaults to 1, but Sun set + // it to 0 so we do too. + private int[] defaults = { + AD, 1970, JANUARY, 0, 0, 1, 0, -1, 0, AM, 0, 0, 0, 0, 0, 0, 0 + }; + /** * Set all fields to their default values. */ private void setDefaultFields() { - // According to the spec DAY_OF_WEEK_IN_MONTH defaults to 1, - // but Sun set it to 0 so we do too. - int[] defaults = { - AD, 1970, JANUARY, 0, 0, 1, 0, -1, 0, AM, 0, 0, 0, 0, 0, 0, 0 - }; - System.arraycopy(defaults, 0, fields, 0, FIELD_COUNT); - fields[DAY_OF_WEEK] = getFirstDayOfWeek(); + for (int i = 0; i < FIELD_COUNT; i++) + { + if (isSet[i]) + continue; + + if (i == DAY_OF_WEEK) + fields[i] = getFirstDayOfWeek(); + else + fields[i] = defaults[i]; + } + // It seems odd that a call to computeTime() should cause // areFieldsSet to become true, but that's what Sun do... areFieldsSet = true; -- cgit v1.2.1