سؤال

أقوم بتشغيل تطبيق Tomcat، وأحتاج إلى عرض بعض قيم الوقت.لسوء الحظ، الوقت يقترب من ساعة واحدة.لقد بحثت في الأمر واكتشفت أنه تم تعيين المنطقة الزمنية الافتراضية الخاصة بي على:

sun.util.calendar.ZoneInfo[id="GMT-08:00",
                           offset=-28800000,
                           dstSavings=0,
                           useDaylight=false,
                           transitions=0,
                           lastRule=null]

بدلاً من المنطقة الزمنية للمحيط الهادئ.تتم الإشارة إلى ذلك أيضًا عندما أحاول طباعة المنطقة الزمنية الافتراضية اسم العرض, ، ويظهر "GMT-08:00"، والذي يبدو أنه يشير لي إلى أنه لم يتم ضبطه بشكل صحيح على المنطقة الزمنية للمحيط الهادئ للولايات المتحدة.أنا أعمل على Ubuntu Hardy Heron، الذي تمت ترقيته من Gutsy Gibbon.

هل يوجد ملف تكوين يمكنني تحديثه لإخبار JRE باستخدام Pacific مع جميع معلومات التوقيت الصيفي المرتبطة؟يظهر الوقت على جهازي بشكل صحيح، لذلك لا يبدو أنه خطأ في التكوين على مستوى نظام التشغيل.


حسنًا، إليك تحديثًا.اقترح أحد زملائي في العمل أن أقوم بتحديث JAVA_OPTS في /etc/profile الخاص بي ليشمل "-Duser.timezone=US/Pacific"، وهو ما نجح (رأيت أيضًا CATALINA_OPTS، والذي قمت بتحديثه أيضًا).في الواقع، لقد قمت للتو بتصدير التغيير إلى المتغيرات بدلاً من استخدام الملف /etc/profile الجديد (ستؤدي إعادة التشغيل لاحقًا إلى التقاط التغييرات وسأصبح ذهبيًا).

ومع ذلك، مازلت أعتقد أن هناك حل أفضل..يجب أن يكون هناك تكوين لـ Java في مكان ما يوضح المنطقة الزمنية التي تستخدمها، أو كيفية التقاط المنطقة الزمنية.إذا كان شخص ما يعرف مثل هذا الإعداد، فسيكون ذلك رائعًا، ولكن في الوقت الحالي يعد هذا حلاً مناسبًا.


أنا أستخدم الإصدار 1.5، وهي بالتأكيد مشكلة التوقيت الصيفي.كما ترون، تم ضبط المنطقة الزمنية على عدم استخدام التوقيت الصيفي.أعتقد أنه تم ضبطه بشكل عام على -8 بدلاً من المنطقة الزمنية المحددة للمحيط الهادئ.نظرًا لأن الإزاحة العامة -8 لا تحتوي على معلومات التوقيت الصيفي، فهي بالطبع لا تستخدمها، ولكن السؤال هو، أين يمكنني إخبار Java باستخدام المنطقة الزمنية للمحيط الهادئ عند بدء التشغيل؟أنا لا أبحث عن حل برمجي، بل يجب أن يكون حلاً للتكوين.

هل كانت مفيدة؟

المحلول

إنها "غريبة" في الطريقة التي يبحث بها JVM عن ملف Zoneinfo.يرى معرف الخطأ 6456628.

الحل الأسهل هو جعل /etc/localtime رابطًا رمزيًا لملف معلومات المنطقة الصحيح.بالنسبة لتوقيت المحيط الهادئ، يجب أن تعمل الأوامر التالية:

# sudo cp /etc/localtime /etc/localtime.dist
# sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

لم أواجه أي مشاكل مع نهج الارتباط الرمزي.

يحرر:تمت إضافة "سودو" إلى الأوامر.

نصائح أخرى

في Ubuntu، لا يكفي تغيير الملف /etc/localtime فقط.يبدو أنه يقرأ ملف /etc/timezone أيضًا.من الأفضل اتباع تعليمات لتعيين المنطقة الزمنية بشكل صحيح.وعلى وجه الخصوص، قم بما يلي:

$ sudo cp /etc/timezone /etc/timezone.dist
$ echo "Australia/Adelaide" | sudo tee /etc/timezone
Australia/Adelaide
$ sudo dpkg-reconfigure --frontend noninteractive tzdata

Current default time zone: 'Australia/Adelaide'
Local time is now:      Sat May  8 21:19:24 CST 2010.
Universal Time is now:  Sat May  8 11:49:24 UTC 2010.

على نظام Ubuntu الخاص بي، إذا كان /etc/localtime و /etc/timezone غير متناسقين، يبدو أن Java تقرأ المنطقة الزمنية الافتراضية من /etc/timezone .

كان لدي مشكلة مماثلة، وربما نفس المشكلة.ومع ذلك، يعمل خادم Tomcat الخاص بي على صندوق Windows لذا لن يعمل حل الارتباط الرمزي.

أضبط -Duser.timezone=Australia/Sydney في ال JAVA_OPTS لكن Tomcat لم يتعرف على أن التوقيت الصيفي كان ساريًا.كحل بديل لقد تغيرت Australia/Sydney (جرينتش+10:00) إلى Pacific/Numea (GMT+11:00) حتى يتم عرض الأوقات بشكل صحيح ولكني أرغب في معرفة الحل الفعلي أو الخطأ، إن وجد.

قد يكون من المفيد التحقق جيدًا من قواعد المنطقة الزمنية التي يستخدمها نظام التشغيل لديك.

/usr/bin/zdump -v /etc/localtime | less

يجب أن يحتوي هذا الملف على قواعد التوقيت الصيفي، مثل تلك الخاصة بعام 2080:

/etc/localtime  Sun Mar 31 01:00:00 2080 UTC = Sun Mar 31 02:00:00 2080 BST isdst=1 gmtoff=3600

يمكنك مقارنة ذلك بقواعد المنطقة الزمنية التي تعتقد أنه يجب عليك استخدامها.يمكن العثور عليها في /usr/مشاركة/zoneinfo/.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top