我试图通过使用Long tms = 1666682820002将Instant date = Instant.ofEpochMilli(tms)与保存在Oracle中的日期进行比较,该日期的格式为25-10月25日-22 09.27.00,0000000--最后6个数字始终为零。Oracle中的列被声明为时间戳,9被声明为fractional_seconds_precision。
我试图将长值转换为Instant,但不知何故,我没有我想要的精度--我获得了2022-10-25T07:27:00.002Z,因此当我在更新查询中通过这个即时值进行搜索时,我找不到任何记录。
有更好的办法解决这个问题吗?
我还考虑过在时间戳中转换长日期,将丢失的微秒和纳秒加为零,转换为字符串,并将它们与db中的内容进行比较。
谢谢
发布于 2022-11-18 20:23:20
关于你问题的一部分,关于世界协调时1970年第一分钟以来的毫秒数,1970-01-01T00:00:00Z…
Instant instant = Instant.ofEpochMilli( 1_666_682_820_002L ) ;
String output = instant.toString() ;看这个在Ideone.com运行的代码。
2022-10-25T07:27:00.002Z
如果要清除小数秒,请截断。
Instant instantTrunc = instant.truncatedTo( ChronoUnit.SECONDS ) ;若要在数据库中搜索,请使用映射到SQL标准类型java.time.OffsetDateTime的TIMESTAMP WITH TIME ZONE类。
OffsetDateTime odt = instantTrunc.atOffset( ZoneOffset.UTC ) ;
myPreparedStatement.setObject( … , odt ) ;从类似于SQL标准类型TIMESTAMP WITH TIME ZONE的类型的数据库列中检索。
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;获取自1970-01-01T00:00:00Z的时代基准以来的毫秒计数。注意数据丢失,因为这会忽略Instant对象中可用的微秒/纳秒。
long epochMilli = odt.toInstant().toEpochMilli() ;https://stackoverflow.com/questions/74494864
复制相似问题