【发布时间】:2013-08-03 12:33:57
【问题描述】:
重新编辑
我有一个带有“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”。有没有效果?
【问题讨论】:
-
我不确定您的
setLastUpdate()是否有意义。结果总是与输入相同。数据库本身的时区不是完全错误吗? -
嗨 BalusC,我编辑了我的问题,修复了 set 方法的代码。但正如我所说,我仍然走错了时间......
标签: jsf-2