2013-08-02 33 views
1

重新編輯F:convertDateTime沒有按」修改所顯示的日期

我有一個字段‘LASTUPDATE’,這是日期類型的,並且其通常的getter/setter的bean。 我使用JPA將我的bean持久化到PostGreSql數據庫中。

我想有我LASTUPDATE保存在UTC,所以設置它之前,我設置時區:

Calendar calendar = DatatypeConverter.parseDateTime(text.toString()); 
calendar.setTimeZone(TimeZone.getTimeZone("Europe/Zurich")); 
doiPool.setLastUpdate(calendar.getTime()); 

所以,如果LASTUPDATE是「2013年8月2日12時17分05秒」 (歐洲/蘇黎世),在數據庫我有「2013-08-02 10:17:05」(UTC),這是我想要的。

當我顯示回來的日期時,我也希望根據我的時區,所以我想我可以使用f:convertDateTime並設置timeZone =「xxx」。

... 
<f:facet name="header"> #{msg.dashboardColumnLastUpdate} </f:facet> 
<h:outputText value="#{dashboardDoiPoolRow.doiPool.lastUpdate}"> 
     <f:convertDateTime pattern="yyyy-MM-dd HH:mm" timeZone="Europe/Zurich"/> 
</h:outputText> 
... 

閱讀其他的答案,我試圖設置

javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE

過,但結果總是相同的:通過顯示我得到2013的日期-0-08-02 10:17:05而不是2013-08-02 12:17:05。

我認爲如果轉換器能正常工作,如果我想根據我的時區顯示2013-08-02 10:17:05(UTC),設置我的時區(歐洲/蘇黎世),我應該得到2013-08-02 12:17:05

我想念什麼?

在DB中,該列的類型是「無時區的時間戳」。它有一些效果嗎?

+0

我不知道你的'setLastUpdate()'是如何有意義的。結果是**始終**與輸入相同。 DB本身的時區不是簡單的錯誤? – BalusC

+0

Hi BalusC,我編輯了我的問題,修復了set方法的代碼。但正如我所說,我仍然得到錯誤的時間... – Francesco

回答

0

在DB中,列的類型是 「無時區時間戳」。

這就是問題所在。如果沒有指定時區,轉換器如何知道如何調整時間?

0

我總是用Greenwich Mean Time作爲參考來設置它。從這裏出發,you just add or deduct ours將其修復到您當前的時區。如果你想避免指定一次並再次,你可以創建自己的facelet tag

<f:convertDateTime pattern="yyyy-MM-dd HH:mm" timeZone="GMT-2"/> 

:這將是你一個解決方法。這樣你可以重用代碼,並且在時區更改的情況下,你只需要更改一次。

<mytag:customDate value="#{bean.date}" /> 
+0

'GMT-2'代替歐洲/蘇黎世究竟是如何解決OP的具體問題? – BalusC