Date时间的时区问题

Blade 未结 2 204
tim
tim 剑童 2025-05-12 14:19

一、该问题的重现步骤是什么?

当前时间10点59分

1.  实体类,默认基础字段 createTime

2.  保存实体类,使用框架的super.save(实体) 方法,save自动补充创建时间,数据库存create_time 2025-05-12 10:59:41

3. page查询分页接口,回显时间2025-05-12 02:59:41


二、你期待的结果是什么?实际看到的又是什么?


createTime在

org.springblade.core.mp.base.BaseEntity

里面


我希望的是时间展示正常。


当前我自己测试,发现如果前端传递值 2025-05-12 10:59:41 ,打印时间会自动加时区 2025-05-12 18:59:41 ,new Date 打印时间  2025-05-12 10:59:41


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

BladeX


4.4.0.RELEASE

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

2条回答
  • 2025-05-12 16:00

    bladex自带的所有模块都有这个问题么,如果所有都这样,需要设置下时区,目前默认+8,就是时区问题。mysql和服务器都设置下时区

    作者追问:2025-05-12 16:52

    当前试了包含自带的岗位等创建时间都是这个问题,当前使用psql数据库,之前服务器和数据库都设置时区了,设置时区的情况下有这个问题。麻烦问下,你说的设置时区指的是哪里?服务器打印TimeZone timeZone = TimeZone.getDefault(); 这个也是上海时区的image.png

    回答: 2025-05-12 17:30

    检查如下几个:
    一、jdbc连接参数 

    spring.datasource.url=jdbc:postgresql://localhost:5432/db_name?serverTimezone=Asia/Shanghai


    二、后端时区

    java -jar -Duser.timezone=Asia/Shanghai your-app.jar

    或者

    @PostConstruct

    void init() {

        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));

    }


    三、配置jackson时区

    spring.jackson.time-zone=Asia/Shanghai

    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss


    四、后端测试打印一个日期看看

    @GetMapping("/test")

    public void testTime() {

        System.out.println(new Date()); // 应输出上海时区时间

    }


    五、如果后端正常,看下前端返回的时间是什么

    const date = new Date("2025-05-12T10:59:41+08:00");

    dayjs("2025-05-12T10:59:41+08:00").format("YYYY-MM-DD HH:mm:ss");

    0 讨论(0)
  • 2025-05-12 16:29


    解决方案


    三、配置jackson时区

    spring.jackson.time-zone=Asia/Shanghai

    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss


    原因,前端也是给的北京时间

    但是服务器序列化 yyyy-MM-dd HH:mm:ss格式 转 Date 自动+8小时,反序列化自动-8小时了。



    0 讨论(0)
代码语言
提交回复