[java] f: convertDateTime يعرض تاريخًا خاطئًا



Answers

وفقًا لمواصفات JSF ، f: convertDateTime افتراضيًا إلى المنطقة الزمنية UTC (بغض النظر عن أي إعداد لمنطقة VM الزمنية) ، والذي يختلف عن المنطقة الزمنية الخاصة بك بمقدار -1 ساعة (الوقت القياسي) أو -2 ساعة (التوقيت الصيفي).

نحن نستخدم تطبيقًا يحتوي على حزمة من صفحات الموقع مع خاصية timeZone مثل:

public TimeZone getTimeZone() {
    return TimeZone.getDefault();
}

ثم نستخدم الخاصية في تعبير EL:

<ice:outputText value="#{deliveryDate}">
    <f:convertDateTime type="both" timeZone="#{Application.timeZone}" />
</ice:outputText>

الميزة هي أنها تفكر في التوقيت القياسي / الصيفي تلقائيًا.

Question

هذا السؤال لديه بالفعل إجابة هنا:

في Web Application I استرداد البيانات باستخدام Hibernate وعرضها في RichFaces dataTable.

في جدول MySQL ، يوجد حقل من نوع "date". عندما أقوم بطباعة هذا الحقل إلى السجل الموجود في حسابي ، فإنه يعرض التاريخ الصحيح من قاعدة البيانات (على سبيل المثال 2010-04-21). ولكن في الأغنياء: dataTable فإنه يظهر على النحو التالي:

4/20/10

لذلك هناك اختلاف يوم واحد!

أضفت المحول "f: convertDateTime" وقمت بتعيين سمة "type" إلى "كليهما" لعرض الوقت أيضًا. لذلك يظهر الآن:

4/20/10 10:00:00 مساءً

رمز "f: convertDateTime" لقد استخدمت:

<f:convertDateTime locale="locale.US" type="both" dateStyle="short"/>

لذلك يبدو f: أحلام convertDateTime تصل بعض الوقت لأنه لا يوجد معلومات الوقت في حقل جدول MySQL!

ما الخطأ الذي افعله؟ ما الذي يجب علي فعله لعرض التاريخ الصحيح؟

شكرا توم




كان لدينا نفس المشكلة وانتهى الأمر مع كتابة محول JSF جديد يستخدم SimpleDateFormat الذي تم إنشاؤه باستخدام new SimpleDateFormat(String pattern) لتحويل التاريخ.




Links