java 时间戳纳米级_java.sql.Timestamp存储NanoSeconds的方式

2023-05-16

java.sql.Timestamp构造函数如下:

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);

}

}

它基本上以毫秒为单位接受时间,然后提取最后3位数并使其成为纳米级.所以对于毫秒值1304135631 421,我得到Timestamp.getnanos()as

421000000.这是简单的计算(最后加上6个零)……似乎不是最佳的.

一种更好的方法可能是Timestamp构造函数,它接受以纳秒为单位的时间,然后计算出纳秒值.

如果运行以下程序,您将看到实际纳秒与Timestamp计算纳秒标记返回的纳秒之间的差异.

long a = 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 is actual nanos" + System.nanoTime()%1000000000);

System.out.println("--------------------------");

if(b-a >= 1)

break;

}

所以关于时间戳的所有讨论都说它存储的时间长达几纳秒,似乎不是那么正确..不是吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 时间戳纳米级_java.sql.Timestamp存储NanoSeconds的方式 的相关文章

随机推荐