Inconsistente tijdstempelresultaten met JDBC-toepassingen

Probleem

Wanneer u JDBC-toepassingen gebruikt Azure Databricks clusters, ziet u inconsistente resultaten bij het schakelen tussen standaardtijd java.sql.Timestamp en zomertijd.

Oorzaak

Azure Databricks clusters gebruiken standaard UTC.

java.sql.Timestamp maakt gebruik van de lokale tijdzone van de JVM.

Als een Azure Databricks als een tekenreeks retourneert, parseert de JVM het als en wordt ervan uitgenomen dat de 2021-07-12 21:43:08 2021-07-12 21:43:08 tijdzone lokaal is.

Dit werkt normaal voor het grootste deel van het jaar, maar wanneer de lokale tijdzone een DST-aanpassing heeft, veroorzaakt dit een probleem omdat UTC niet verandert.

Op 14 maart 2021 zijn de VS bijvoorbeeld overgeschakeld van standaardtijd naar zomertijd. Dit betekent dat de lokale tijd is gegaan van 1:59 uur tot 3:00 uur.

Als een Azure Databricks-cluster retourneert, converteert de JVM deze automatisch naar omdat 2021-03-14 02:10:55 02:10:55 op die datum niet in de lokale tijd 2021-03-14 03:10:55 bestaat.

Oplossing

Optie 1: Configureer de JVM-tijdzone naar UTC.

Stel de user.timezone eigenschap in op GMT .

Bekijk de documentatie over instellingen voor java-tijdzone voor meer informatie.

Optie 2: Gebruik ODBC in plaats van JDBC. ODBC interpreteert tijdstempels als UTC.

U kunt ook turbodbc gebruiken.

Optie 3: Stel de lokale tijdzone in op UTC in uw JDBC-toepassing.

Lees de documentatie voor uw JDBC-toepassing voor meer informatie over het configureren van de lokale tijdzone-instellingen.