問題
當使用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應用程序的文檔,了解如何配置本地時區設置。