Inkonzisztens időbélyeg-eredmények a JDBC-alkalmazásokkal

Probléma

Ha JDBC-alkalmazásokat Azure Databricks fürtökhöz, inkonzisztens eredményeket lát a normál idő és a nyári java.sql.Timestamp időszámítás közötti váltáskor.

Ok

Azure Databricks a fürtök alapértelmezés szerint UTC-t használnak.

java.sql.Timestamp A a JVM helyi időzónát használja.

Ha egy Azure Databricks fürt sztringként tér vissza, a JVM a következőként elemezi azt: , és feltételezi, hogy az 2021-07-12 21:43:082021-07-12 21:43:08 időzóna helyi.

Ez általában az év nagy része alatt működik, de ha a helyi időzónában változás történik a DST-ben, az problémát okoz, mivel az UTC nem változik.

2021. március 14-én például az Egyesült Államok a szokásos időről a nyári időszámításra váltott. Ez azt jelenti, hogy a helyi idő 1:59-től 3:00-ig ment.

Ha egy Azure Databricks fürt a értéket adja vissza, a JVM automatikusan konvertálja azt értékké, mert a 2021-03-14 02:10:552021-03-14 03:10:55 02:10:55 nem létezik helyi időben az adott dátumon.

Megoldás

1. lehetőség: Konfigurálja a JVM időzónát UTC-időre.

Állítsa a user.timezone tulajdonságot a következőre: GMT .

További információért tekintse át a Java időzóna-beállítási dokumentációját.

2. lehetőség: JDBC helyett használjon ODBC-t. Az ODBC UTC-ként értelmezi az időbélyegeket.

A turbodbc is használható.

3. lehetőség: A JDBC-alkalmazásban állítsa a helyi időzónát UTC-re.

Tekintse át a JDBC-alkalmazás dokumentációját, amelyből megtudhatja, hogyan konfigurálhatja a helyi időzóna beállításait.