* ┏┓ ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃ ┃
* ┃ ━ ┃ ++ + + +
* ████━████ ┃+
* ┃ ┃ +
* ┃ ┻ ┃
* ┃ ┃ + +
* ┗━┓ ┏━┛
* ┃ ┃
* ┃ ┃ + + + +
* ┃ ┃
* ┃ ┃ + 神兽保佑
* ┃ ┃ 代码无bug
* ┃ ┃ +
* ┃ ┗━━━┓ + +
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛ + + + +
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛+ + + +
原因:由于前后端时区设置不一致导致的。具体来说,后端返回的时间数据和数据库中的时间数据相差8个小时是因为:
-
默认使用 UTC 时区:
- Java 中的日期和时间默认使用 UTC(协调世界时)进行存储和处理。
-
前端展示的时间与实际时间不同步:
- 如果你在没有指定时区的情况下在前端显示这些时间,它们可能会与用户所在时区的实际时间相差8小时。
-
Spring Jackson 序列化和反序列化时区问题:
- Spring 在将日期和时间转换为 JSON 或从 JSON 转换回来时,默认使用的时区可能与你期望的时不匹配。
-
解决方案:配置 Spring 使用正确的时区:
- 添加
spring.jackson.time-zone=GMT+8
配置,告诉 Spring 在序列化或反序列化日期和时间时始终使用 GMT+8 时区。
- 添加
yml配置
spring:
jackson:
time-zone: GMT+8
properties配置
spring.jackson.time-zone=GMT+8
通过这个配置,你可以确保前后端之间的时间一致,并且能够正确地显示给用户。这有助于提高应用程序的用户体验,并避免因时间差异而引发的问题。