f:convertDateTime不会修改显示的日期

时间:2013-08-02 09:34:08

标签: jsf-2

重新编辑

我有一个带有字段“lastUpdate”的bean,它的类型是Date,以及它通常的getter / setter。 我使用JPA将我的bean保存到PostGreSql DB中。

我希望将我的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”(欧洲/苏黎世),在DB我有“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中,列的类型为“没有时区的时间戳”。它有什么影响吗?

2 个答案:

答案 0 :(得分:0)

我总是使用Greenwich Mean Time作为参考来设置它。从这里出发,you just add or deduct ours将其修复为您当前的时区。这将是一个解决方法:

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

如果您想避免一次又一次地指定它,您可以创建自己的facelet tag。这样,您可以重复使用代码,并且在时区更改的情况下,您只需更改一次。

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

答案 1 :(得分:0)

  

在数据库中,列的类型为“没有时区的时间戳”。

这就是问题所在。如果没有指定时区,转换器如何知道如何调整时间?