java.sql.timestamp constructor go this:
public timestamp(long time) { super((time/1000)*1000); nanos = (int)((time%1000) * 1000000); if (nanos < 0) { nanos = 1000000000 + nanos; super.settime(((time/1000)-1)*1000); } }
it accepts time in millisecond , extracts last 3 digits , makes nanos. millisecond value of 1304135631 421, i'm getting timestamp.getnanos() 421000000. plain calculation (adding 6 zeroes @ end)... not seems optimum.
a better way have been timestamp constructor accepts time in nanoseconds , calculates nanosecond value out of that.
if run below program, you'll see difference between actual nanoseconds , 1 returned timestamp way of calculating nanosecods.
long = system.currenttimemillis(); for(;;){ long b = system.currenttimemillis(); timestamp tm = new timestamp(system.currenttimemillis()); system.out.println(tm.gettime()); system.out.println(tm.getnanos()); system.out.println("this actual nanos" + system.nanotime()%1000000000); system.out.println("--------------------------"); if(b-a >= 1) break; }
so discussion timestamp says stores time nanoseconds , not seems correct.. isn't?
the time in millis not represent time in nanos. more precise can't be. you're supposed use timestamp#setnanos()
set real nanos.
long timeinmillis = system.currenttimemillis(); long timeinnanos = system.nanotime(); timestamp timestamp = new timestamp(timeinmillis); timestamp.setnanos((int) (timeinnanos % 1000000000)); // ...
Comments
Post a Comment