當前位置:首頁 > IT技術 > 數(shù)據(jù)庫 > 正文

MongoDB數(shù)據(jù)日期顯示相差8小時 原因和解決方案
2022-09-06 22:37:15


文章目錄

一、透過現(xiàn)象看本質
1. 背景調研

最近因為項目需要使用到了MongoDB,使用Navicat Premium 15 客戶端可視化工具查詢數(shù)據(jù),可是問題來了,插入的數(shù)據(jù)在查看的時候顯示相差了8個小時,但是程序里是通過new Date() 來生成時間的,系統(tǒng)時間確認沒問題,經過多次測試發(fā)現(xiàn)程序調用得到的日期也沒有問題,那么只能是客戶端程序的顯示問題了。

MongoDB數(shù)據(jù)日期顯示相差8小時 原因和解決方案_可視化工具

  • 正常時間為:
2022-07-03 12:38:11
  • 實際落庫時間
2022-07-03 04:38:11
2. 原因分析

時區(qū)差異:
存儲在mongodb中的時間是標準時間UTC +0:00,而中國的時區(qū)是+8.00

說明:UTC 即 Universal Time Coordinated,即0時區(qū)與東八區(qū)相差8小時。

3. 影響評估

1.數(shù)據(jù)庫查詢數(shù)據(jù)->顯示問題
2.查詢數(shù)據(jù)不正確->頁面返回數(shù)據(jù)也少了8小時

二、解決方案
2.1. 客戶端顯示問題

下載可視化工具Robo3T
打開Robo3T;

  • 點擊Options -> display dates in…可以看到有2個選項:
  • 1.UTC(默認)
  • 2.Local TimeZone.
  • 選擇Local TimeZone,再次查看數(shù)據(jù)時間,發(fā)現(xiàn)已經正常。

注:UTC 即 Universal Time Coordinated,即0時區(qū)與東八區(qū)相差8小時。

2.2. 查詢數(shù)據(jù)不正確

在返回的對象屬性上添加@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"
},
...其他數(shù)據(jù)忽略
]
  • 正常時間為:
2022-07-03 12:38:11

測試結果:返回數(shù)據(jù)時間與正確落庫一致


本文摘自 :https://blog.51cto.com/g

開通會員,享受整站包年服務立即開通 >