为了账号安全,请及时绑定邮箱和手机立即绑定

将java.sql.Timestamp转换为即时时间

将java.sql.Timestamp转换为即时时间

守着一只汪 2021-04-09 09:14:56
从我的数据库中,我将值检索为:20-DEC-17 10.15.53.000000000 AM我希望将以上内容java.sql.Timestamp转换为即时时间:2017-12-20T10:15:53Z我尝试使用当前时间戳进行跟踪Timestamp ts2 = new Timestamp(date1.getTime());Date tradeDate1=new Date(ts2.getTime());Instant tradeInstant = tradeDate1.toInstant();System.out.println("Tade Instant"+ tradeInstant);实际时间戳记: Fri Jun 22 16:07:35 IST 2018什么是instan版画: Tade Instant2018-06-22T10:37:35.420Z将hours/mins/seconds被更新,我不想-有这种能够保留作为一个办法?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我假设您至少使用Java 8和至少JDBC 4.2。我进一步假设时间戳记在数据库中没有时区或偏移量信息,但应理解为UTC中的时间戳记(建议做法)。在这种情况下,我认为在Java中显式添加有关UTC偏移量的信息是最安全的:


PreparedStatement yourPreparedStatement 

            = yourConnection.prepareStatement("select trade_timestamp from your_table");

ResultSet rs = yourPreparedStatement.executeQuery();

while (rs.next()) {

    LocalDateTime tradeDateTime = rs.getObject(1, LocalDateTime.class);

    Instant tradeInstant = tradeDateTime.atOffset(ZoneOffset.UTC).toInstant();

    System.out.println("Trade Instant: " + tradeInstant);

}

请注意,代码Timestamp完全避免了过时的类。ALocalDateTime是没有时区或偏移量的日期和时间。如果您的数据库数据类型为timestamp with timezone,则可以传递Instant.class给rs.getObject并Instant立即获得该数据,而不必进行转换。根据数据库及其功能,还可以将UTC设置为数据库会话的偏移量/时区,以便以相同的方式获得正确的时刻。


您的代码出了什么问题?

看来您的数据库会话将时间戳理解为本地时区中的日期和时间(IST,我认为它是针对印度标准时间的(存在其他解释))。根据Mark Rotteveel的参考,此行为是JDBC所必需的,但是当该值采用UTC时,它与您的需求不一致。因此,尽管打印时看起来正确,但它给了您错误的时间点。转换本身是正确的。


查看完整回答
反对 回复 2021-04-21
  • 3 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信