小编Vic*_*cky的帖子

java.sql.Timestamp存储NanoSeconds的方式

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

它基本上以毫秒为单位接受时间,然后提取最后3位数并使其成为纳米级.因此,对于毫秒值1304135631 421,我得到Timestamp.getnanos()为 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

java timestamp jdbc nanotime

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×1

jdbc ×1

nanotime ×1

timestamp ×1