Date/Calendar related fixes (?)

Mike Leddy mike@ultranet.com.br
Tue May 11 19:17:00 GMT 1999


In order to get my app to work right I had to make a couple of patches. I'm not
sure
if they'll turn out to be correct.

First in natGregorianCalendar.cc, java::util::GregorianCalendar::computeTime,
line 60

> time = t * 1000LL + elements(fields)[MILLISECOND];

On my platform, i586-pc-linux-gnu/Debian an 32 bit overflow results. I basically
made
1000 a long long constant. There must be a better way eg. using a cast in a
platform
independant way, but I don't know my way around the code yet.

Second in Calendar.java, setTimeInMillis, line 249

> computeFields();

I replaced clear() with computeFields(). My app extensively uses
Date.setMinute() etc.
Reading the code its a 'chicken before the egg' situation regarding fields and
the
computed time. As the primary function of the calendar is to convert fields to a

millisecond time it would seem that the potential penalty of a computeFields
call in
setTimeInMillis is worth the extra logic that would be needed to detect a
computed
time before computed fields state.

A simple program that shows uninitialized fields causing a rogue date:

import java.util.Date;
public class Test {
  static public void main(String[] args)  {
    Date d=new Date();
    System.out.println(d);
    d.setMinutes(0);
    System.out.println(d);
  }
}

Hope that these two pointers result in official fixes. My app is running now :-)

Regards,

Mike Leddy.






More information about the Java mailing list