MongoDB数据日期显示相差8小时 原因和解决方案

一、透过现象看本质
1. 背景调研

最近因为项目需要使用到了MongoDB,使用Navicat Premium 15 客户端可视化工具查询数据,可是问题来了,插入的数据在查看的时候显示相差了8个小时,但是程序里是通过new Date() 来生成时间的,系统时间确认没问题,经过多次测试发现程序调用得到的日期也没有问题,那么只能是客户端程序的显示问题了。
在这里插入图片描述

  • 正常时间为:
2022-07-03 12:38:11
  • 实际落库时间
2022-07-03 04:38:11
2. 原因分析

时区差异:
存储在mongodb中的时间是标准时间UTC +0:00,而中国的时区是+8.00

说明:UTC 即 Universal Time Coordinated,即0时区与东八区相差8小时。

3. 影响评估

1.数据库查询数据->显示问题
2.查询数据不正确->页面返回数据也少了8小时

二、解决方案
2.1. 客户端显示问题

下载可视化工具Robo3T
打开Robo3T;

  • 点击Options -> display dates in…可以看到有2个选项:
    • 1.UTC(默认)
    • 2.Local TimeZone.
  • 选择Local TimeZone,再次查看数据时间,发现已经正常。

注:UTC 即 Universal Time Coordinated,即0时区与东八区相差8小时。

2.2. 查询数据不正确

在返回的对象属性上添加@JsonFormat注解和配置

    @JsonFormat(locale = "zh", timezone = "Asia/Shanghai", pattern = "yyyy-MM-dd HH:mm:ss")
    @Field("createTime")
    private Date createTime;            // 消息创建时间
2.3. 效果验证
  • 客户端显示问题

  • 前端接收报文
    返回时间属性:createTime

[{
    
    
	"id": "62c11d3435b7c4007a8e650e",
	"fromUserId": "21100598TZ9XG6RP",
	"fromNickname": "小美女",
	"fromFace": "http://gblfy.cn:9000/imooc/xh.jpg",
	"toUserId": "220620BZ2DH0KP94",
	"msgType": 1,
	"msgContent": {
    
    
		"isFriend": true
	},
	"createTime": "2022-07-03 12:38:11"
},
...其他数据忽略
]
  • 正常时间为:
2022-07-03 12:38:11

测试结果:返回数据时间与正确落库一致

猜你喜欢

转载自blog.csdn.net/weixin_40816738/article/details/125584805