文章目錄
- ??二、解決方案??
一、透過(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)題了。
- 正常時(shí)間為:
- 實(shí)際落庫(kù)時(shí)間
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注解和配置
2.3. 效果驗(yàn)證
- 客戶端顯示問(wèn)題
- 前端接收?qǐng)?bào)文
返回時(shí)間屬性:createTime
- 正常時(shí)間為:
測(cè)試結(jié)果:返回?cái)?shù)據(jù)時(shí)間與正確落庫(kù)一致
本文摘自 :https://blog.51cto.com/g