1

私の Postgresql データベースには、次の値を持つタイム ゾーンのないタイムスタンプがあります: "2012-06-15 17:49:46.423"(Hibernate で使用されるデフォルトのデータ型)。

SimpleDateFormat とこのパターンでフォーマットすると"EEEE dd MMMM yyyy"、SimpleDateFormat#format は「jeudi 14 juin 2012」を返します。

結果が「vendredi 15 juin 2012」でないのはなぜですか?

フランス語以外の言語のフランス語から英語への翻訳 :

"jeudi 14 juin 2012"    => "Thursday 14th of June 2012"
"vendredi 15 juin 2012" => "Friday 15th of June 2012"

Hibernate 3.6.8.Final
JSF 2.0
JBoss 5.1.0.GA
Java 6

ありがとう。

4

3 に答える 3

1

調べてみると、主に 2 つの選択肢があることがわかりました。Hibernate または JSF を介してタイムゾーンを設定します。

オプション 1 : 休止状態
アクセス タイプをプロパティに変更できます。したがって、セッターでは、タイムスタンプの値を適切なタイム ゾーンに調整します。別の解決策は、カスタムの Hibernate User Type を作成することです。

詳細はこちら: Hibernate使用した日付とタイム ゾーンのマッピング、パート 2: いくつかのソリューション

オプション 2: JSF
最後のオプションです。custom converterf:convertDateTime

これは私がやった方法です:

<h:outputText value="#{row.date}">
    <f:convertDateTime pattern="EEEE dd MMMM yyyy" locale="fr_FR" type="date" timeZone="Europe/Paris" />
</h:outputText>

私の日付はすべて正しいです!

ソース (フランス語) : Comment utiliser le timezone du compensant JSF convertDateTime

于 2012-06-18T10:58:53.670 に答える
1

予想よりも 1 日早く進んでいることを示しています。理由は、私が推測する別のタイムゾーンにあるサーバー時間かもしれません。とにかく、以下のコードは正常に動作しています:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM yyyy", Locale.FRENCH);
System.out.println(sdf.format(new Date()));
于 2012-06-15T16:39:37.780 に答える
0
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy zzzz G", Locale.FRENCH);

これを試して

また、日付を印刷すると、フォーマットされた日付テキストがマシンのタイムゾーンで自動的に印刷されます。

于 2012-06-15T16:33:41.730 に答える