You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:35:00