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 时,会直接将其作为本地时间处理,不会进行时区转换。