Feign Date類型時間錯誤問題


問題

在feign傳輸date類型的數據時,在調用方時間正確,而被調用方獲取時時間會相差14個小時。

原因

Feign客戶端在進行通信時,會將Date類型對象轉為String類型,如果這個時間是北京時間2019年2月19日20點30分,因為中國的時區叫做CTS,所以轉化后的String為“Tue Feb 19 20:30:00 CST 2019”. 服務端將接收的String類型日期轉換為Date類型,轉換采用的是Date的默認構造器new Date('Tue Feb 19 20:30:00 CST 2019'),這里就是錯誤發生的時刻,因為CTS代表的時區其實有四個(Central Standard Time (USA) UT-6:00、Central Standard Time (Australia) UT+9:30、China Standard Time UT+8:00、Cuba Standard Time UT-4:00),同時表示美國,澳大利亞,中國,古巴四個國家的標准時間。根據JavaDoc,jvm會將CTS理解成了美國中部時區,因此造成了時區錯誤。

JVM見到CTS默認是美國的時區(UT-6:00),與中國時區(UT+8:00)相差14個小時。

解決方法

  1. 使用String類型作為參數,在接收方進行類型轉換
  2. 使用JDK8中的LocalDate
  3. 第三種方法增加配置類,使Feign使用自定義的規則轉換


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM