Re: Why Java's Time related classes are so confusing and error-prone?
www <www@nospam.com> writes:
Am I using them in-correctly or they are really error-prone?
Although one might say ?Then, read the manual of
those classes, first?, you are right, that they often
do not fit.
That might be the reason for the third generation (Joda):
http://jcp.org/en/jsr/detail?id=310
I have also written date and time classes myself and
prefer to use explicit specification of the time zone,
whenever appropriate.
To add 10 minutes to the current time using my classes:
public class Main
{
public static void main( java.lang.String[] args )
{
final de.dclj.ram.system.gregorian.DefaultJavaInstant t =
new de.dclj.ram.system.gregorian.DefaultJavaInstant();
de.dclj.ram.routine.java.util.Instant.setToWallClock( t );
java.lang.System.out.println
( new de.dclj.ram.notation.iso8601.Instant( t ));
t.add( 1. / 24 / 60 * 10 );
java.lang.System.out.println
( new de.dclj.ram.notation.iso8601.Instant( t )); }
}
2007-06-20T18:25:33+02:00
2007-06-20T18:35:33+02:00
Here the time zone is part of the default toString()-result,
so that one becomes aware of it. IIRC, the zone ?+02:00? is
stamped on the instant by ?setToWallClock?.
To get a time difference between two dates, one also usually
specifies the zone explicitly, when using my classes:
public class Main
{ public static void main( final java.lang.String[] args )
throws java.text.ParseException
{
final double now =
new de.dclj.ram.notation.iso8601.Instant
( "2005-05-22T14:12:23+02:00" ).doubleValue();
final double then =
new de.dclj.ram.notation.iso8601.Instant
( "1970-01-01T00:00:00+01:00" ).doubleValue();
final double diff = now - then;
final double ms = 1. / 24 / 60 / 60 / 1000;
java.lang.System.out.println( diff / ms ); }}
1.11676754299999E12
Responding to criticism, I plan as a next step to
convert time differences and times to high precision
arithmetics, so that the result is intended to become
1.116767543E12