48

私の Web アプリケーションでは、Hibernate を使用してデータを取得し、RichFaces dataTable に表示します。

私のMySQLテーブルには、「日付」タイプのフィールドがあります。このフィールドを Bean のログに出力すると、データベースからの正しい日付が表示されます (例: 2010-04-21)。しかし、rich:dataTable では次のように表示されます。

4/20/10

なので1日ずれてる!

時間も表示するために、「f:convertDateTime」コンバーターを追加し、「type」属性を「both」に設定しました。したがって、次のようになります。

4/20/10 10:00:00 午後

私が使用した "f:convertDateTime" のコード:

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

f:convertDateTime は、MySQL テーブル フィールドに時間情報がないため、時間を夢見ているようです。

私は何を間違っていますか?正しい日付を表示するにはどうすればよいですか?

ありがとうトム

4

5 に答える 5

115

JSF は、日付/時刻コンバーターのデフォルトで UTC タイムゾーンを使用します。これをオーバーライドするにはtimeZone、すべての日付/時刻コンバーターで属性を設定する必要があります。EDT タイムゾーンを使用した例を次に示します (米国東部にいると仮定します)。

<f:convertDateTime locale="en_US" type="both" dateStyle="short" timeZone="EDT" />

このlocale属性は、完全な日/月名の形式のみを制御します (英語になります)。

デフォルトの UTC タイムゾーンを上書きしてオペレーティング プラットフォームのデフォルト タイムゾーンにする場合は、次のコンテキスト パラメータを に追加する必要がありますweb.xml

<context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
</context-param>

そうすれば、個々の JSF<f:convertXxx>タグをすべて編集する必要はありません。

于 2011-05-24T12:06:38.320 に答える
16

JSF仕様によると、f:convertDateTimeのデフォルトはUTCタイムゾーン(VMタイムゾーン設定に関係なく)であり、タイムゾーンとは-1時間(標準時間)または-2時間(夏時間)異なります。

次のようなtimeZoneプロパティを持つアプリケーションスコープのページBeanを使用します。

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

次に、EL式でプロパティを使用します。

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

利点は、標準/夏の時間を自動的に考慮することです。

于 2011-05-24T10:14:35.460 に答える
4

タイムゾーンに問題がある可能性があります。

それらを解決する方法については、この記事を確認してください。

timeZoneその前に、属性を明示的に設定してみることができます<f:convertDataTime>

于 2010-04-22T10:08:14.190 に答える
0

new SimpleDateFormat(String pattern)同じ問題が発生し、日付変換用に作成された SimpleDateFormat を使用する新しい JSF コンバーターを作成することになりました。

于 2011-03-21T14:58:35.717 に答える