以26个字符的格式读取java中的db2时间戳?毫秒的最后一个字符丢失
我正在尝试从数据库表中检索字段 列名-创建时间戳 我的DB2列的数据类型-时间戳 DB2格式-yyyy-MM-dd HH:MM:ss.ssss 我能够在DB visualizer中查看这种格式的数据 我正在使用以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()打印时,最后三个 实际
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,当然这取决于主机硬件的限制
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提供微秒。我现在无法更早进行测试。