This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: Bug in Calendar when setting time across daylight-saving boundaries?!
- From: Martin Egholm Nielsen <martin at egholm-nielsen dot dk>
- To: java at gcc dot gnu dot org
- Date: Tue, 05 Oct 2004 11:38:19 +0200
- Subject: Re: Bug in Calendar when setting time across daylight-saving boundaries?!
- References: <cjlpsf$uld$1@sea.gmane.org> <4161C924.8000203@redhat.com>
Hi Bryce,
This patch below should fix the problem.
I just scanned the other set-methods of GCJ's Calendar. The
public final void set(int year, int month, int date)
method does not use the newly patched
public void set(int field, int value)
method. Hence, this method should either be modified to use the
patched-setter, or should be patched along the same lines you have
indicated below:
public final void set(int year, int month, int date)
{
isTimeSet = false;
fields[YEAR] = year;
fields[MONTH] = month;
fields[DATE] = date;
isSet[YEAR] = isSet[MONTH] = isSet[DATE] = true;
isSet[WEEK_OF_YEAR] = false;
isSet[DAY_OF_YEAR] = false;
isSet[WEEK_OF_MONTH] = false;
isSet[DAY_OF_WEEK] = false;
isSet[DAY_OF_WEEK_IN_MONTH] = false;
// We may have rolled over a DST boundary.
isSet[DST_OFFSET] = false;
} // set
What do you say?!
// Martin
* java/util/Calendar.java (set): Invalidate DST_OFFSET as setting a
calendar field may roll over a DST boundary.
--- Calendar.java 29 Aug 2004 17:28:09 -0000 1.23
+++ Calendar.java 4 Oct 2004 22:02:42 -0000
@@ -651,6 +651,10 @@
isSet[HOUR_OF_DAY] = false;
break;
}
+ + // We may have rolled over a DST boundary.
+ if (field != DST_OFFSET && field != ZONE_OFFSET)
+ isSet[DST_OFFSET] = false;
}