Inkonsekventa tidsstämpelresultat med JDBC-program

Problem

När du använder JDBC-program Azure Databricks kluster ser du inkonsekventa resultat när du växlar mellan java.sql.Timestamp standardtid och sommartid.

Orsak

Azure Databricks kluster använder UTC som standard.

java.sql.Timestamp använder JVM:ens lokala tidszon.

Om ett Azure Databricks kluster returnerar som en sträng parsar JVM det som och 2021-07-12 21:43:082021-07-12 21:43:08 förutsätter att tidszonen är lokal.

Detta fungerar normalt under större delen av året, men när den lokala tidszonen har en DST-justering orsakar det ett problem eftersom UTC inte ändras.

Exempelvis växlade USA från standardtid till sommartid den 14 mars 2021. Det innebär att lokal tid gick från 01:59 till 03:00.

Om ett Azure Databricks-kluster returnerar konverterar JVM den automatiskt till eftersom 2021-03-14 02:10:55 02:10:55 inte finns i lokal tid på 2021-03-14 03:10:55 det datumet.

Lösning

Alternativ 1: Konfigurera JVM-tidszonen till UTC.

Ange egenskapen user.timezone till GMT .

Mer information finns i dokumentationen för tidszonsinställningar i Java.

Alternativ 2: Använd ODBC i stället för JDBC. ODBC tolkar tidsstämplar som UTC.

Du kan också använda turbodbc.

Alternativ 3: Ange den lokala tidszonen till UTC i JDBC-programmet.

Läs dokumentationen för ditt JDBC-program för att lära dig hur du konfigurerar inställningarna för den lokala tidszonen.