Noa Resare wrote:

On 04-10-08 [EMAIL PROTECTED] checked in changes to java.util.Calendar
that effectively made an explicitly set DST_OFFSET value to a function
of the set TimeZone for the Calendar object if an other field (such as
YEAR) is set in the calendar after DST_OFFSET is set.

I think this is wrong, as someone who sets DST_OFFSET explicitly and not
via .setTimeZone() presumably knows what she is doing and expects the
provided DST_OFFSET to be used.


Hi Noa,

Thanks for looking into this. I agree that there is a bug here, as demonstrated by your mauve test, but I'm not sure that this is the correct fix. It should not be possible to set DST_OFFSET explicitly because DST_OFFSET changes at different times of the year depending on whether the Calendar is in DST or not according to the rules of it's TimeZone. ie: for a given timezone and date value, there is only one valid value for the DST_OFFSET field and it doesn't make sense to set a different one explicitly.

Although the spec doesn't define what happens if you do this, I think the simplest (implementation-wise) and most logical approach is to ignore user attempts to set DST_OFFSET, which also appears to be what Sun's implementation does (recent ones, at least). Consider the following test case for an example:

import java.util.*;

public class TestDST
{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Toronto"));
c.set(2004, Calendar.NOVEMBER, 1); // Not in DST period
c.set(Calendar.DST_OFFSET, -10000);
System.out.println (c.get(Calendar.DST_OFFSET));


   c.set(2004, Calendar.OCTOBER, 1);  // In DST period
   c.set(Calendar.DST_OFFSET, 0);
   System.out.println (c.get(Calendar.DST_OFFSET));
 }
}

With Sun's JDK 1.5, this gives the following output:

$ java TestDST
0
3600000

So, I think the real bug here is in SimpleDateFormat - it should only use setTimeZone() and not try to set DST_OFFSET or ZONE_OFFSET explicitly. We should clarify our Javadoc to specify that attempts to set these fields explicitly are ignored.

Regards

Bryce



_______________________________________________
Classpath mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/classpath

Reply via email to