重新编辑
我有一个带有字段“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中,列的类型为“没有时区的时间戳”。它有什么影响吗?
答案 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)
在数据库中,列的类型为“没有时区的时间戳”。
这就是问题所在。如果没有指定时区,转换器如何知道如何调整时间?