首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较长时间戳与Oracle时间戳

比较长时间戳与Oracle时间戳
EN

Stack Overflow用户
提问于 2022-11-18 20:11:34
回答 1查看 54关注 0票数 0

我试图通过使用Long tms = 1666682820002Instant 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中的内容进行比较。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-11-18 20:23:20

关于你问题的一部分,关于世界协调时1970年第一分钟以来的毫秒数,1970-01-01T00:00:00Z…

打给Instant.ofEpochMilli

代码语言:javascript
复制
Instant instant = Instant.ofEpochMilli( 1_666_682_820_002L ) ;
String output = instant.toString() ;

看这个在Ideone.com运行的代码

2022-10-25T07:27:00.002Z

如果要清除小数秒,请截断。

代码语言:javascript
复制
Instant instantTrunc = instant.truncatedTo( ChronoUnit.SECONDS ) ;

若要在数据库中搜索,请使用映射到SQL标准类型java.time.OffsetDateTimeTIMESTAMP WITH TIME ZONE类。

代码语言:javascript
复制
OffsetDateTime odt = instantTrunc.atOffset( ZoneOffset.UTC ) ;
myPreparedStatement.setObject( … , odt ) ;

从类似于SQL标准类型TIMESTAMP WITH TIME ZONE的类型的数据库列中检索。

代码语言:javascript
复制
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

获取自1970-01-01T00:00:00Z的时代基准以来的毫秒计数。注意数据丢失,因为这会忽略Instant对象中可用的微秒/纳秒。

代码语言:javascript
复制
long epochMilli = odt.toInstant().toEpochMilli() ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74494864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档