System.currentTimeMillis check in System class during startup.

jon.vanalten at redhat.com jon.vanalten at redhat.com
Thu Jul 8 13:16:25 UTC 2010


----- "Martin Buchholz" <martinrb at google.com> wrote:

> On Thu, Jul 1, 2010 at 10:05,  <jon.vanalten at redhat.com> wrote:
> > Hi Martin,
> >
> > Thanks for your input.
> >
> > ----- "Martin Buchholz" <martinrb at google.com> wrote:
> >
> >> It's not at all clear that one cannot solve the y2038 problem on
> >> systems with a 32-bit time_t.
> >> That's what Michael Schwern is trying to do here:
> >> http://code.google.com/p/y2038/
> >> His code is available.
> >>
> >
> > Unfortunately unless I am missing something this example is not
> solving the y2038 problem for when a 32-bit system clock reaches
> overflow.  See:
> >
> > http://code.google.com/p/y2038/wiki/HowItWorks
> >
> > It is simply allowing for representations of future times beyond
> 2038.  Java already has this.
> 
> The JDK appears to implement currentTimeMillis by simply calling
> gettimeofday and using the time_t values in that directly, without
> any
> additional cleverness.  But I thought the whole point of the y2038
> project is to provide the additional cleverness that you can conjure
> up a 64-bit time_t on a system that only has a 32-bit time_t.
> 

Err, perhaps I have been clear like mud.  The functions targeted by y2038 are those that take a time value and break it down into a struct tm.  They do not provide any tricks for retrieving the current system time.  When I said that "Java already has this", I meant that within the Java libraries, the data types used already allow for representation of a wide range of dates.  For example, with currentTimeMillis() returns a long, which (if we ignore any underlying implementation or host system issues) allows dates nearly 300 million years into the past or future.  The Date/Calendar classes similarly can represent far past and far future dates.

Definitely, both for currentTimeMillis() and for other internal use of gettimeofday(), Java is currently vulnerable to 32-bit system clock overflow.  I've been looking at this and have some ideas for workarounds.  More to follow in future post(s).

cheers,

jon



More information about the core-libs-dev mailing list