jdbc - java.sql.Timestamp way of storing NanoSeconds -


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