後台時間正確,返回給前台的時間不正確,和後台差8個小時
後台列印的時間如下:
資料庫儲存時間如下:
介面返回給前台的時間如下:
相差8個小時
spring中對於@restcontroller或者@controller+@responsebody
註解的介面方法的返回值預設是json格式,
所以當對於date型別的資料,在返回瀏覽器端是會被spring-boot
預設的jackson框架轉換,而jackson框架預設的時區gmt(相對於中國是少了8小時)。
1 如果你的專案是 spring-boot
spring.jackson.time-zone=gmt+8
在跟上一條時間戳配置
spring.jackson.date-format=yyyy-mm-dd hh:mm:ss
可以是date時間格式化,一般這兩條語句一起用
2 如果你的專案是 springmvc
在spring mvc中經常需要返回json資料,對於日期型別資料可能會遇到返回格式化不對,返回的時間相差8小時等問題,今天我們一起來分享下在實際開發商過程中遇到的這兩個問題。當然解決方法有很多種,本文中只選一種簡單的方式。
在model中,使用註解方式格式化。示例**如下:
@jsonformat(pattern="yyyy-mm-dd hh:mm:ss")
public date getcreatetime()
public void setcreatetime(date createtime)
這個主要是因為時區的問題,只要在spring的配置檔案中設定好時區就好了。**如下:
non_null
這個原因隱藏很深,當你發現你試過上面的方案後時間還是少的話,
請檢查資料是從什麼時候時間變少了,若從資料庫查出來就少啦,
若你有用的資料庫是mysql,
且mysql.jar是6.x版本的話(與5.x不同),可能你配置的時區錯了,
通過
linux系統時區是utc,而mysql使用的是系統時區。
1 在 資料庫的配置檔案 jdbd url 加上
servertimezone=asia/shanghai,
jdbc:mysql://localhost:3306/dcoj?servertimezone=asia/shanghai
2、修改mysql資料庫的my.cnf檔案的[mysqld]字段,新增default-time-zone=+8:00
3、修改linux系統時區為asia/shanghai
mysql資料庫執行在docker容器中,所以要修改mysql容器的時區為asia/shanghai。
進入mysql容器,鏈結檔案,退出mysql容器,重啟mysql(一氣呵成)
docker exec -it mysql bash
ln -sf /usr/share/zoneinfo/asia/shanghai /etc/localtime
exit
docker restart mysql
還有一種可能是自己的系統時間不對,這種是最小的可能性,網上講到的不多,如果上面你都試啦還不對可以從這方面入 Date轉換,獲取時間相差值
date和string型別互相轉化 dateformat dateformat new dateformat yyyy mm dd hh mm ss date currenttime dateformat.parse 2020 4 12 14 15 00 system.out.println cur...
後端傳到前端的JSON無法遍歷
後端傳輸到前端的json資料不是json物件,而是json格式的字串,所以要把字串解析為物件才能遍歷。jsonobject json jsonobject jsonobject.tojson userinf system.out.println json.tojsonstring response....
前端時間Date顯示問題踩坑
本人非職業前端一枚,但是在 開發過程中遇到相容性問題也是要解決的。日前,bug庫里驚現一時間字串nan nan nan,遂究其因。bug復現 開發過程中一直是使用chrome進行除錯,偶爾使用firefox調優。看到bug圖時,不得已開啟了本機的ie功能,在ie11的環境下,居然還有這種問題。第一反...