當(dāng)前位置:首頁(yè) > IT技術(shù) > 數(shù)據(jù)庫(kù) > 正文

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


文章目錄

一、透過(guò)現(xiàn)象看本質(zhì)
1. 背景調(diào)研

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

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

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

時(shí)區(qū)差異:
存儲(chǔ)在mongodb中的時(shí)間是標(biāo)準(zhǔn)時(shí)間UTC +0:00,而中國(guó)的時(shí)區(qū)是+8.00

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

3. 影響評(píng)估

1.數(shù)據(jù)庫(kù)查詢數(shù)據(jù)->顯示問(wèn)題
2.查詢數(shù)據(jù)不正確->頁(yè)面返回?cái)?shù)據(jù)也少了8小時(shí)

二、解決方案
2.1. 客戶端顯示問(wèn)題

下載可視化工具Robo3T
打開(kāi)Robo3T;

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

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

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

在返回的對(duì)象屬性上添加@JsonFormat注解和配置

(locale = "zh", timezone = "Asia/Shanghai", pattern = "yyyy-MM-dd HH:mm:ss")
@Field("createTime")
private Date createTime;
2.3. 效果驗(yàn)證
  • 客戶端顯示問(wèn)題
  • 前端接收?qǐng)?bào)文
    返回時(shí)間屬性: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ù)忽略
]
  • 正常時(shí)間為:
2022-07-03 12:38:11

測(cè)試結(jié)果:返回?cái)?shù)據(jù)時(shí)間與正確落庫(kù)一致


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

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >