OSDN Git Service

2004-10-08 Bryce McKinlay <mckinlay@redhat.com>
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 Oct 2004 16:19:37 +0000 (16:19 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 Oct 2004 16:19:37 +0000 (16:19 +0000)
* java/util/Calendar.java (set): Invalidate DST_OFFSET
field as a DST boundary may have been crossed.
* java/util/GregorianCalendar.java (add): Throw
IllegalArgumentException on attempt to add to DST_OFFSET or
ZONE_OFFSET fields. Update javadoc.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88847 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/util/Calendar.java
libjava/java/util/GregorianCalendar.java

index 856ac3a..f46c283 100644 (file)
@@ -1,3 +1,11 @@
+2004-10-08  Bryce McKinlay  <mckinlay@redhat.com>
+
+       * java/util/Calendar.java (set): Invalidate DST_OFFSET
+       field as a DST boundary may have been crossed.
+       * java/util/GregorianCalendar.java (add): Throw 
+       IllegalArgumentException on attempt to add to DST_OFFSET or 
+       ZONE_OFFSET fields. Update javadoc.
+
 2004-10-09  Michael Koch  <konqueror@gmx.de>
 
        * java/io/CharArrayWriter.java
index 05d48c2..6e9eda9 100644 (file)
@@ -651,6 +651,10 @@ public abstract class Calendar implements Serializable, Cloneable
        isSet[HOUR_OF_DAY] = false;
        break;
       }
+
+    // May have crossed over a DST boundary.
+    if (field != DST_OFFSET && field != ZONE_OFFSET)
+      isSet[DST_OFFSET] = false;
   }
 
   /**
@@ -671,6 +675,8 @@ public abstract class Calendar implements Serializable, Cloneable
     isSet[WEEK_OF_MONTH] = false;
     isSet[DAY_OF_WEEK] = false;
     isSet[DAY_OF_WEEK_IN_MONTH] = false;
+
+    isSet[DST_OFFSET] = false;  // May have crossed a DST boundary.
   }
 
   /**
index fcef6bb..2504f60 100644 (file)
@@ -540,7 +540,7 @@ public class GregorianCalendar extends Calendar
     fields[DAY_OF_WEEK] = weekday;
 
     // get a first approximation of the year.  This may be one 
-    // year to big.
+    // year too big.
     int year = 1970 + (gregorian
                       ? ((day - 100) * 400) / (365 * 400 + 100 - 4 + 1)
                       : ((day - 100) * 4) / (365 * 4 + 1));
@@ -709,6 +709,10 @@ public class GregorianCalendar extends Calendar
    * it does what you expect: Jan, 25 + 10 Days is Feb, 4.
    * @param field the time field. One of the time field constants.
    * @param amount the amount of time.
+   * @exception IllegalArgumentException if <code>field</code> is 
+   *   <code>ZONE_OFFSET</code>, <code>DST_OFFSET</code>, or invalid; or
+   *   if <code>amount</code> contains an out-of-range value and the calendar
+   *   is not in lenient mode.
    */
   public void add(int field, int amount)
   {
@@ -785,18 +789,9 @@ public class GregorianCalendar extends Calendar
        areFieldsSet = false;
        break;
       case ZONE_OFFSET:
-       complete();
-       fields[ZONE_OFFSET] += amount;
-       time -= amount;
-       break;
       case DST_OFFSET:
-       complete();
-       fields[DST_OFFSET] += amount;
-       isTimeSet = false;
-       break;
       default:
-       throw new IllegalArgumentException
-         ("Unknown Calendar field: " + field);
+       throw new IllegalArgumentException("Invalid or unknown field");
       }
   }