Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.Timestamp是否提供有用的纳秒精度?_Java_Timestamp - Fatal编程技术网

java.sql.Timestamp是否提供有用的纳秒精度?

java.sql.Timestamp是否提供有用的纳秒精度?,java,timestamp,Java,Timestamp,我运行了一个简单的测试来创建一百万个时间对象,并测试了以下内容 int nano = new Timestamp(new Date().getTime()).getNanos(); if((nano & 0x00000000003F) != 0x0) { System.out.println("Nano from timestamp : " + nano); } 没有任何输出,这意味着最后的最低有效6位都是零。那么,时间戳是否仅仅依赖于System.currentTim

我运行了一个简单的测试来创建一百万个时间对象,并测试了以下内容

 int nano = new Timestamp(new Date().getTime()).getNanos();
 if((nano & 0x00000000003F) != 0x0) {
    System.out.println("Nano from timestamp : " +  nano);
 }
没有任何输出,这意味着最后的最低有效6位都是零。那么,时间戳是否仅仅依赖于System.currentTimeMillis()返回的值,并将其乘以1000000

时间戳在纳秒精度下有用吗?在当前的情况下,由于我没有得到任何非零值,这意味着精度只是降低到毫秒(而不是纳秒)

那么使用时间戳有什么好处呢?

该类型使用单独的字段具有纳秒精度,如文档所示:

注意:此类型是一个
java.util.Date
和一个单独的 纳秒值。只有整数秒存储在内存中
java.util.Date
组件。小数秒是 分开

您正在使用设置时间戳值,该值仅提供毫秒精度:“返回此日期对象表示的自1970年1月1日00:00:00 GMT以来的毫秒数。”;该毫秒值的亚秒值存储在nanos字段中,换句话说,通过这种方式,nanos的亚毫秒值为零

如果要使用纳秒精度,则需要单独设置和获取纳秒(使用and),或者需要使用从具有纳秒精度的类型(
java.time.LocalDateTime
)构造它

鉴于nanos存储了所有的小数秒,因此使用
setNanos
有一些注意事项,请参见


这就是说,只有当您使用的数据库实际支持纳秒精度时,您才能从中受益。例如,我为Firebird维护JDBC驱动程序,Firebird只支持100微秒精度,而不是纳秒精度,例如PostgreSQL支持微秒精度。

A
java.util.Date.getTime()
只有毫秒,所以不能通过这种方式获取纳秒精度。