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

Java实现PostgreSQL日期时间格式与指定格式互转咨询

Java中PostgreSQL日期格式与带时区格式的互转方法

一、从PostgreSQL格式(yyyy-MM-dd HH:mm:ss.SSS)转成带时区格式(EEE MMM dd HH:mm:ss zzz yyyy)

PostgreSQL返回的2022-11-28 23:36:43.712是不带时区的日期时间字符串,我们需要先将其解析为本地日期时间,再转换为目标时区(如IST对应的Asia/Kolkata)的带时区时间,最后格式化输出。

使用Java 8+的java.time API实现:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class DateConverter {
    public static void main(String[] args) {
        String pgDateTimeStr = "2022-11-28 23:36:43.712";
        // 解析PostgreSQL格式字符串
        LocalDateTime localDateTime = LocalDateTime.parse(pgDateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
        
        // 转换为IST时区(Asia/Kolkata)
        ZonedDateTime istDateTime = localDateTime.atZone(ZoneId.of("Asia/Kolkata"));
        
        // 格式化为目标字符串
        DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
        String targetStr = istDateTime.format(targetFormatter);
        System.out.println(targetStr); // 输出示例:Mon Nov 28 20:51:58 IST 2022
    }
}

二、从带时区格式转成PostgreSQL格式

反过来,将Mon Nov 28 20:51:58 IST 2022这类带时区的字符串解析为带时区日期时间,再转换为目标时区(如UTC)的本地日期时间,最后格式化为PostgreSQL格式。

代码实现:

import java.time.ZonedDateTime;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class ReverseDateConverter {
    public static void main(String[] args) {
        String istDateTimeStr = "Mon Nov 28 20:51:58 IST 2022";
        // 解析带时区字符串,指定时区为Asia/Kolkata
        DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(istDateTimeStr, sourceFormatter.withZone(ZoneId.of("Asia/Kolkata")));
        
        // 转换为UTC时区的本地日期时间
        LocalDateTime utcLocalDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime();
        
        // 格式化为PostgreSQL格式
        DateTimeFormatter pgFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        String pgDateTimeStr = utcLocalDateTime.format(pgFormatter);
        System.out.println(pgDateTimeStr); // 输出示例:2022-11-28 23:36:43.712
    }
}

注意事项

  • 优先使用Java 8+引入的java.time系列API,避免旧Date、SimpleDateFormat的线程安全问题。
  • 时区建议使用完整ID(如Asia/Kolkata)而非缩写(如IST),避免缩写对应多个时区的歧义。
  • 如果PostgreSQL返回的是带时区的时间类型(timestamp with time zone),直接解析为OffsetDateTime或ZonedDateTime即可,无需先转LocalDateTime。

内容的提问来源于stack exchange,提问作者Kavishka Madhushan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:01:01