Java LocalDateTime转日期存储Oracle DATE列的格式适配问题
解决Java LocalDateTime存储到Oracle DATE列的格式问题
首先明确一个关键事实:Oracle的DATE类型并不存储字符串格式,它存储的是包含日期和时分秒的二进制时间值,你看到的2024-04-29T18:24:41是Java中LocalDateTime对象的toString()输出格式,和数据库实际存储的时间值无关。
优化你的Java代码
你当前的代码做了无意义的字符串转换,直接获取当前时间即可(注意要实例化实体对象,避免空指针异常):
SewaApiReqResEntity sewaApiHealthReqRes = new SewaApiReqResEntity(); LocalDateTime sentTime = LocalDateTime.now(); sewaApiHealthReqRes.setSentTime(sentTime); System.out.println(sewaApiHealthReqRes.getSentTime());
这段代码的输出格式是LocalDateTime默认的toString()格式,但这只是Java层面的显示,不影响数据库存储的时间值。
如何在查询时看到指定格式
如果需要在查询结果中得到MM/dd/yyyy HH:mm:ss格式的时间,不要修改存储逻辑,而是在SQL查询时用TO_CHAR函数格式化:
SELECT TO_CHAR(sent_time, 'MM/DD/YYYY HH24:MI:SS') AS formatted_sent_time FROM your_table_name;
HH24表示24小时制,避免12小时制的AM/PM问题MI是分钟的正确格式符(不要用MM,MM代表月份)
调整Oracle SQL Developer的默认显示格式
如果希望在SQL Developer中默认显示指定格式的DATE值:
- 打开SQL Developer,点击
Tools->Preferences - 导航到
Database->NLS - 在
Date Format输入框中填写MM/DD/YYYY HH24:MI:SS - 保存设置后重新查询,即可看到默认格式化后的日期
关于实体类字段类型
用LocalDateTime是正确的选择,它完美对应Oracle DATE类型的日期+时分秒存储特性。之前尝试的java.util.Date是旧API,反而需要额外处理时区和转换逻辑,不如Java 8+的新日期API清晰可靠。
内容的提问来源于stack exchange,提问作者Rahul.V
相关产品推荐
相关产品推荐

