نتائج الطابع الزمني غير متناسقة مع تطبيقات JDBC

مشكلة

عند استخدام تطبيقات JDBC مع مجموعات Azure Databricks تشاهد نتائج غير java.sql.Timestamp متناسقة عند التبديل بين التوقيت القياسي والتوقيت الصيفي.

السبب

تستخدم مجموعات Azure Databricks UTC بشكل افتراضي.

java.sql.Timestamp يستخدم المنطقة الزمنية المحلية ل JVM.

إذا كان نظام المجموعة Databricks Azure بإرجاع 2021-07-12 21:43:08 كسلسلة، JVM يوزع كما 2021-07-12 21:43:08 ويفترض المنطقة الزمنية المحلية.

يعمل هذا عادة معظم السنة ولكن عندما يكون لدى المنطقة الزمنية المحلية تعديل التوقيت الصيفي فإنه يسبب مشكلة كما UTC لا يتغير.

على سبيل المثال، في 14 مارس 2021، تحولت الولايات المتحدة من التوقيت القياسي إلى التوقيت الصيفي. وهذا يعني أن التوقيت المحلي ذهب من 1:59 صباحا إلى 3:00 صباحا.

إذا كان إرجاع كتلة Databricks Azure 2021-03-14 02:10:55 ، JVM تلقائيا بتحويله إلى 2021-03-14 03:10:55 لأن 02:10:55 غير موجود في التوقيت المحلي في ذلك التاريخ.

حل

الخيار الأول: تكوين المنطقة الزمنية JVM إلى UTC.

اضبط الخاصية user.timezone على GMT.

راجع وثائق إعدادات المنطقة الزمنية Java للحصول على مزيد من المعلومات.

الخيار الثاني: استخدام ODBC بدلا من JDBC. ODBC يفسر الطوابع الزمنية UTC.

يمكنك أيضا استخدام توربوبك.

الخيار الثالث: تعيين المنطقة الزمنية المحلية إلى UTC في تطبيق JDBC.

راجع الوثائق الخاصة بالتطبيق JDBC لمعرفة كيفية تكوين إعدادات المنطقة الزمنية المحلية.