與JDBC應用程序不一致的時間戳結果

在調整夏令時時,時間戳記錄與JDBC應用程序不一致。

寫的manjunath.swamy

最後發布時間:2022年6月1日

問題

當使用JDBC應用程序與Databricks集群時,您會看到不一致java.sql.Timestamp在標準時間和夏令時之間切換時的結果。

導致

Databricks集群默認使用UTC。

java.sql.Timestamp使用JVM的本地時區。

如果Databricks集群返回2021-07-12 21:43:08作為字符串,JVM將其解析為2021-07-12 21:43:08並且假設時區是本地的。

這在一年中大部分時間都是正常工作的,但是當當地時區有DST調整時,它會導致一個問題,因為UTC不會改變。

例如,2021年3月14日,美國從標準時間改為日光節約時間。這意味著當地時間從淩晨1點59分到淩晨3點。

如果Databricks集群返回2021-03-14 02:10:55, JVM自動將其轉換為2021-03-14 03:10:55因為02:10:55在該日期的當地時間不存在。

解決方案

選項1:配置JVM時區為UTC。

設置user.timezone財產格林尼治時間

檢查Java時區設置文檔以獲取更多信息。

選項2:使用ODBC代替JDBC。ODBC將時間戳解釋為UTC。

你也可以用turbodbc

選項3:在JDBC應用程序中將本地時區設置為UTC。

查看JDBC應用程序的文檔,了解如何配置本地時區設置。