Java中移除日期时间'T'并转换为PostgreSQL Timestamp方法咨询
嘿,针对你这个把JSON里的ISO datetime转成PostgreSQL timestamp格式的需求,我给你整理了几个实用的Java实现方案,从简单到严谨都有:
方案1:简单字符串替换(快速粗暴但有效)
如果你的JSON里的dateTime字段严格遵循yyyy-MM-dd'T'HH:mm:ss这种固定格式,直接把中间的'T'替换成空格就完事了,完全不需要额外的日期处理类,效率最高:
// 假设已经从JSON中提取出dateTime字符串 String jsonDateTime = "2018-06-02T15:49:23"; String sqlTimestampStr = jsonDateTime.replace('T', ' '); // 接下来把sqlTimestampStr作为参数传入存储过程即可
方案2:用Java 8+的DateTimeFormatter(更严谨)
如果担心dateTime格式可能有变体(比如带毫秒2018-06-02T15:49:23.123或者时区信息),用Java自带的java.time包来解析再格式化会更安全,还能自动校验格式合法性:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateTimeConverter { public static void main(String[] args) { String jsonDateTime = "2018-06-02T15:49:23"; // 解析ISO标准的日期时间字符串 LocalDateTime dateTime = LocalDateTime.parse(jsonDateTime); // 格式化为PostgreSQL需要的不带T的格式 String sqlTimestampStr = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 后续将sqlTimestampStr传入存储过程 } }
这个方法能兼容大部分合法的ISO 8601格式,就算输入带毫秒,格式化后也会自动去掉(如果不需要保留毫秒的话),要是需要保留,把格式改成yyyy-MM-dd HH:mm:ss.SSS就行。
方案3:直接通过JDBC传递类型(最推荐,无需手动转字符串)
其实根本不用自己折腾字符串转换!PostgreSQL的JDBC驱动(版本42.2及以上)完全支持直接传递LocalDateTime对象,驱动会自动处理和数据库timestamp类型的映射:
import java.sql.CallableStatement; import java.sql.Connection; import java.time.LocalDateTime; // 假设你已经获取了有效的数据库连接Connection conn String jsonDateTime = "2018-06-02T15:49:23"; LocalDateTime dateTime = LocalDateTime.parse(jsonDateTime); // 调用存储过程的示例代码 String callSql = "{call your_stored_procedure(?)}"; try (CallableStatement cs = conn.prepareCall(callSql)) { // 直接设置LocalDateTime类型参数,JDBC驱动自动处理格式 cs.setObject(1, dateTime); cs.execute(); } catch (Exception e) { e.printStackTrace(); }
这个方案是最稳妥的,避免了手动字符串处理可能出现的格式错误,也符合JDBC的最佳实践。
额外注意点
- 如果你还在使用Java 8之前的版本,可以用Joda-Time库来替代
java.time包,用法类似。 - 确保你的PostgreSQL JDBC驱动是最新版本,对
java.time系列类型的支持更完善。
内容的提问来源于stack exchange,提问作者ThatMan
相关产品推荐
相关产品推荐

