重新编辑
我有一个带有“lastUpdate”字段的bean,它的类型是Date,以及它通常的getter/setter。我使用 JPA 将我的 bean 保存到 PostGreSql 数据库中。
我想让我的 lastUpdate 保存在 UTC 中,所以在设置它之前,我设置了时区:
Calendar calendar = DatatypeConverter.parseDateTime( text.toString() );
calendar.setTimeZone( TimeZone.getTimeZone( "Europe/Zurich" ) );
doiPool.setLastUpdate( calendar.getTime() );
所以,如果 lastUpdate 是“2013-08-02 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-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 中,该列的类型为“timestamp without time zone”。有没有什么作用?