resultSet.getTimeStamp("column")未返回午标(AM/PM)问题咨询
关于Oracle SQL Developer与Java JDBC返回时间戳格式差异的问题
这不是你的操作错误,两者的差异源于时间戳的存储与展示逻辑不同:
核心原因
- Java JDBC的
resultSet.getTimeStamp("TIME_STAMP")返回的是java.sql.Timestamp对象,这个对象本身存储的是精确到纳秒的时间数值(包含时区信息),并不自带AM/PM格式。你看到的不带午标的字符串,只是该对象默认toString()方法的输出格式。 - Oracle SQL Developer显示的带AM/PM的格式,是工具自身根据会话的日期格式参数(如
NLS_TIMESTAMP_FORMAT)、时区设置对时间戳做的格式化渲染,属于工具层的展示效果,不是数据库返回的原始数据格式。
解决方法:手动格式化时间字符串
如果需要在Java中得到带AM/PM的时间字符串,需对Timestamp对象进行手动格式化:
Java 8+ 推荐使用DateTimeFormatter
Timestamp ts = resultSet.getTimestamp("TIME_STAMP"); // 定义匹配需求的格式,Locale指定为英文避免月份缩写异常 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh:mm:ss.SSSSSSSS a", Locale.ENGLISH); String formattedTime = formatter.format(ts.toLocalDateTime()); // 输出示例:11-JUL-23 02:14:40.12345678 PM System.out.println(formattedTime);
兼容旧版本的SimpleDateFormat
Timestamp ts = resultSet.getTimestamp("TIME_STAMP"); SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy hh:mm:ss.SSSSSSSS a", Locale.ENGLISH); String formattedTime = sdf.format(ts); // 输出示例:11-JUL-23 02:14:40.12345678 PM System.out.println(formattedTime);
额外注意:时区一致性
如果数据库与Java应用的时区不一致,获取Timestamp时建议指定时区,避免时间偏差:
Timestamp ts = resultSet.getTimestamp("TIME_STAMP", Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai")));
内容的提问来源于stack exchange,提问作者Miracle
相关产品推荐
相关产品推荐

