Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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
以26个字符的格式读取java中的db2时间戳?毫秒的最后一个字符丢失_Java_Sql_Timestamp_Db2 - Fatal编程技术网

以26个字符的格式读取java中的db2时间戳?毫秒的最后一个字符丢失

以26个字符的格式读取java中的db2时间戳?毫秒的最后一个字符丢失,java,sql,timestamp,db2,Java,Sql,Timestamp,Db2,我正在尝试从数据库表中检索字段 列名-创建时间戳 我的DB2列的数据类型-时间戳 DB2格式-yyyy-MM-dd HH:MM:ss.ssss 我能够在DB visualizer中查看这种格式的数据 我正在使用 bean.setCreateTimestamp(rs.getTimestamp(create_timestamp)); bean的createTimestamp字段是java.sql.Timestamp类型 当我使用bean.getCreateTimstamp()打印时,最后三个 实际

我正在尝试从数据库表中检索字段

列名-创建时间戳

我的DB2列的数据类型-时间戳

DB2格式-yyyy-MM-dd HH:MM:ss.ssss

我能够在DB visualizer中查看这种格式的数据

我正在使用

bean.setCreateTimestamp(rs.getTimestamp(create_timestamp));
bean的
createTimestamp
字段是
java.sql.Timestamp
类型

当我使用
bean.getCreateTimstamp()
打印时,最后三个 实际DB2值:
2016-01-30 11:43:06.006000
毫秒缺失

yyyy MM dd HH:MM:ss.SSS是打印的格式

Sysout值:来自bean>>2016-01-30 11:43:06.006

我应该怎么做才能得到完整的时间戳?
我需要这些数据来创建用于生成报告的文件名。

您的问题非常令人困惑,不确定您是用Java还是在数据库中捕获当前时间。无论哪种方式,您都在使用一个麻烦的旧日期时间类(
java.sql.Timestamp
),它现在是遗留的,被java.time类取代

time类使用纳秒的分辨率,最多为小数点秒的九位小数在任何版本的Java中,都可以携带纳秒值。但是,捕捉当前时刻是另一回事

  • Java8
    在Java8中捕获当前时刻的时间限制为毫秒,分辨率为三位数

  • Java 9及更高版本
    在Java 9中捕获当前时刻使用分辨率更高的of,当然这取决于主机硬件的限制

在macOS Sierra上运行的MacBook Pro带有使用Oracle Java 9.0.4的Intel i7芯片,我正在以微秒为单位捕捉当前时刻的六位小数

Instant.now()
2018-03-09T21:03:33.831515Z

使用支持JDBC4.2及更高版本的JDBC驱动程序,您应该能够直接与数据库交换java.time对象。无需再次使用
java.sql.Timestamp

如果DB2列缺少时区或UTC信息偏移量,请使用Java中的
LocalDateTime
class

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
如果数据库列是UTC格式,请使用
Instant
class

Instant instant = myResultSet.getObject( … , Instant.class ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(向我们展示您使用Java打印时间戳的代码。我不确定精度是否已经丢失。DB2的哪个版本?Java的哪个版本?我知道在IBM I上,某些检索时间戳的方法只返回毫秒(前三位小数)和微秒(位置4-6)返回为0。由此看来,即使在Java 8之前,Java Clock类也只能精确到毫秒(3位)。那么,DB中有什么?加载DB字段的是什么。即使该字段可以保存微秒,加载该字段的进程也必须能够为i提供microseconds.DB2(至少是v7.1+)可以使用now()、CURRENT_TIME或CURRENT_TIMESTAMP提供微秒。我现在无法更早进行测试。