Java实体类 给类型是 Date
mybatis中配置的 jdbcType=“TIMESTAMP”

最后通过mapper查询出的数据,比数据库中一直少8个小时。网上查询以及深度学习 问答系统,都说是时区问题导致的。
检查了数据库连接字符串 已经添加了 asia/shanghai
采用select sysdate() 输出日期也正常
java程序输出日期也正常

就是转换后不对。

没办法采用 java.time.LocalDateTime 类型后转换正确了。

说一下区别:

java.time.LocalDateTime 时间里面没有时区,

java.util.Date 是一个与时区相关的类,它内部存储的是从 1970-01-01 00:00:00 UTC 开始的毫秒数。

当 MyBatis 从数据库读取 TIMESTAMP 类型并转换为 java.util.Date 时,会基于 JVM 的默认时区进行转换。如果数据库时区和 JVM 时区不一致,就会导致时间偏差。

java.time.LocalDateTime 的时区无关性

java.time.LocalDateTime 是一个与时区无关的类,它只表示日期和时间,不包含时区信息。

当 MyBatis 从数据库读取 TIMESTAMP 类型并转换为 LocalDateTime 时,会直接将其作为本地时间处理,不会进行时区转换。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐