Java SimpleDateFormat時間解析時區問題


spark JOB在hive入庫的時候發生了很詭異的現象,根據report_time時間轉換為小時分區的時候,時間對不上,而且只是部分時間對不上,相差12個小時。

由於其他集群未出現此問題,想通過代碼發現是否邏輯存在問題。看了代碼之后發現邏輯也十分簡單:

 

獲取了report_time之后直接通過一個時間轉換函數,獲取了時間。繼續查看事件轉化函數:

這里用到了java 中SimpleDateFormat 對給定的時間進行了轉換,這種轉換java中比較常見,應該也是沒問題的。

懷疑跟集群的時間配置有關,查看集群的兩台機器的時間配置:

主機節點時間配置:(NTP時間同步未打開)

另一個節點的時間配置信息就很不一致了,發現配置的是紐約時區:

 

懷疑是正常的代碼,在不正常的時間配置中執行出現了問題,寫了一個測試代碼:

時區正常的機器上運行,結果正常:

另一時區設置不正常的節點運行,問題重現了:

到此,應該是確定了SimpleDateFormat跟系統時區有關了。

查詢了相關資料,可以通過對SimpleDateFormat對象調用setTimeZone(TimeZone.getTimeZone("CST")方法指定時區,解決相關問題。但是更重要的是保證集群節點時間的一致性。


免責聲明!

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



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