文章目錄
- ??二、解決方案??
一、透過現(xiàn)象看本質
1. 背景調研
最近因為項目需要使用到了MongoDB,使用Navicat Premium 15 客戶端可視化工具查詢數(shù)據(jù),可是問題來了,插入的數(shù)據(jù)在查看的時候顯示相差了8個小時,但是程序里是通過new Date() 來生成時間的,系統(tǒng)時間確認沒問題,經過多次測試發(fā)現(xiàn)程序調用得到的日期也沒有問題,那么只能是客戶端程序的顯示問題了。
- 正常時間為:
- 實際落庫時間
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注解和配置
2.3. 效果驗證
- 客戶端顯示問題
- 前端接收報文
返回時間屬性:createTime
- 正常時間為:
測試結果:返回數(shù)據(jù)時間與正確落庫一致
本文摘自 :https://blog.51cto.com/g