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

如何通过Quarkus Hibernate读取PostgreSQL的timestamp with time zone并修复UI显示问题

问题根本原因

该问题本质是前后端日期时间序列化格式和UI层解析逻辑不兼容,当前后端返回的OffsetDateTime携带了6位微秒+时区偏移的ISO 8601格式,绝大多数前端日期解析器对6位微秒的支持度很差,就会出现解析失败无法显示的问题。

后端修复方案(推荐优先处理,从数据源统一格式)
  • 字段级指定序列化规则
    如果你用的是SpringBoot等默认使用Jackson做序列化的框架,直接在实体类字段上加格式化注解,截断多余微秒位、输出标准ISO格式:
    import com.fasterxml.jackson.annotation.JsonFormat;
    import java.time.OffsetDateTime;
    
    // 实体类字段定义
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
    private OffsetDateTime createdOn;
    
    其中SSS表示仅保留3位毫秒,XXX表示输出标准时区偏移格式,适配99%以上的前端解析逻辑。
  • 全局统一日期序列化规则
    不想逐个字段加注解的话,直接在项目配置中添加全局Jackson序列化规则,以SpringBoot的YAML配置为例:
    spring:
      jackson:
        serialization:
          write-dates-as-timestamps: false
          write-dates-with-zone-id: true
        deserialization:
          adjust-dates-to-context-time-zone: false
        date-format: yyyy-MM-dd'T'HH:mm:ss.SSSXXX
    
  • 可选:统一返回UTC时间
    如果你需要前端统一用UTC时间展示,或者按用户本地时区转换,直接在业务层把OffsetDateTime转为UTC时区即可:
    // 转换为UTC时区,保留原时间点不变
    OffsetDateTime utcCreatedOn = createdOn.withOffsetSameInstant(java.time.ZoneOffset.UTC);
    
前端修复方案(后端调整成本高时可单独处理)
  • 原生JS兼容处理
    先对拿到的日期字符串做预处理,截断6位微秒为3位毫秒,再用Date对象解析:
    function parseCustomIsoDate(dateStr) {
      // 匹配微秒位,只保留前3位毫秒
      return new Date(dateStr.replace(/(\.\d{3})\d*/, '$1'));
    }
    
    // 调用示例
    const createdOn = parseCustomIsoDate('2021-11-02T22:16:16.108341-04:00');
    // 格式化显示为本地时间
    console.log(createdOn.toLocaleString());
    
  • 日期库解析(dayjs/moment为例)
    项目引入了第三方日期库的话,直接使用内置的ISO解析能力即可,以dayjs为例:
    import dayjs from 'dayjs';
    import utc from 'dayjs/plugin/utc';
    dayjs.extend(utc);
    
    // 直接解析带偏移的日期字符串
    const createdOn = dayjs('2021-11-02T22:16:16.108341-04:00');
    // 格式化输出
    console.log(createdOn.format('YYYY-MM-DD HH:mm:ss'));
    

内容的提问来源于stack exchange,提问作者Sajan Soosaimicheal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:15:04