2012-06-15 56 views
1

在我的Postgresql數據庫中,我有一個沒有時區的時間戳,該值爲:"2012-06-15 17:49:46.423"(Hibernate使用的默認數據類型)。Java - SimpleDateFormat格式錯誤

如果我使用SimpleDateFormat格式化此模式"EEEE dd MMMM yyyy",SimpleDateFormat#格式返回「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" 

休眠3.6.8.Final
JSF 2.0
JBoss的5.1.0.GA
的Java 6

謝謝。

+4

時區? –

+0

GMT +1(JBoss方),GMT +0200(Postgresql) – Stephan

+3

此外,「jeudi」是「星期四」,而不是「星期二」。 –

回答

1

搜索後,事實證明,我有兩個主要選項。我可以通過Hibernate或JSF設置時區。

選項1:休眠
我可以將訪問類型更改爲屬性。所以在setter中,我會將時間戳值調整到正確的時區。另一個解決方案是創建一個自定義的Hibernate用戶類型。

全部細節在這裏代碼:Mapping Dates and Time Zones with Hibernate, Part 2: Few Solutions

選項2:JSF
最後的選擇,我無論是在JSF以上創建custom converter簡單地說,我用的f:convertDateTime的timeZone屬性。

這我是如何做的:

<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

0
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy zzzz G", Locale.FRENCH); 

試試這個

還打印出的日期將自動打印機時區格式的日期文本。

1

它顯示你只是提前一天你的期望。原因可能是服務器時間,我猜是在另一個時區。無論如何,下面的代碼工作正常:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM yyyy", Locale.FRENCH); 
System.out.println(sdf.format(new Date()));