如何在java中转换格式时间戳

如何在java中转换格式时间戳,java,Java,我将java与mysql连接,从中我获得sql时间戳数据=2021-03-09 14:33:05.095.{timestamp 0} 现在我需要将该值存储到oracle中。但在oracle中,时间戳格式类似于:07-DEC-17 06.16.35.261000000 PM.{timestamp 6} 如何转换时间戳格式?数据库中的日期时间数据类型没有“格式”,因为它们不是文本。要在数据库和Java之间交换日期时间值,请使用日期时间对象 将字符串输入解析为LocalDateTime 使用数据类型类

我将java与mysql连接,从中我获得sql时间戳数据=2021-03-09 14:33:05.095.{timestamp 0} 现在我需要将该值存储到oracle中。但在oracle中,时间戳格式类似于:07-DEC-17 06.16.35.261000000 PM.{timestamp 6}


如何转换时间戳格式?

数据库中的日期时间数据类型没有“格式”,因为它们不是文本。要在数据库和Java之间交换日期时间值,请使用日期时间对象

将字符串输入解析为LocalDateTime

使用数据类型类似于无时区的SQL标准类型时间戳的列存储在数据库中

对于MySQL,列的类型必须为。 对于Oracle DB,列的类型必须不是带时区的时间戳。 发送日期时间对象

myPreparedStatement.setObject( … , ldt ) ;
检索

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
其中一条评论建议使用java.sql.Timestamp。不要那样做。这个设计拙劣的类已经过时,多年前被JSR310中定义的现代java.time类所取代


所有这些都已经在堆栈溢出上讨论过很多次了。搜索以了解更多信息。

不清楚各数据库使用的格式为何重要。请用一些显示问题的代码更新问题。您不转换任何内容,因为您不使用字符串从/向数据库读取/写入时间戳值,而是使用对象。在负责向用户显示值并从用户检索值的代码中的其他地方进行字符串的转换,而不是在与数据库交互的代码中进行转换。@Andreas的注释是正确的。我建议您不要使用java.sql.Timestamp。该类是对已经设计糟糕的java.util.Date类和早已过时的java.util.Date类的攻击。而是根据具体要求使用OffsetDateTime或LocalDateTime;两者都来自。MySQL以UTC存储时间戳值,因此应该可以在Java中使用OffsetDateTime,在Oracle中使用时区时间戳。
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;