This question already has an answer here:
JSF convertDateTime renders the previous day
(1个答案)
5年前关闭。
在我的Web应用程序中,我使用Hibernate检索数据并将其显示在RichFaces dataTable中。
在我的MySQL表中,有一个“日期”类型的字段。当我将此字段打印到Bean中的日志中时,它会显示数据库中的正确日期(例如2010-04-21)。但是在rich:dataTable中,它显示如下:
因此,相差1天!
我添加了“f:convertDateTime”转换器,并将“type”属性设置为“both”以同时显示时间。所以现在它显示:
我使用的“f:convertDateTime”代码:
如此看来,f:convertDateTime似乎在做梦,因为MySQL-table字段中没有时间信息!
我究竟做错了什么?我需要怎么做才能显示正确的日期?
谢谢汤姆
如果要将默认的UTC时区覆盖为操作平台的默认时区,则需要在
然后,您不需要编辑每个JSF
(1个答案)
5年前关闭。
在我的Web应用程序中,我使用Hibernate检索数据并将其显示在RichFaces dataTable中。
在我的MySQL表中,有一个“日期”类型的字段。当我将此字段打印到Bean中的日志中时,它会显示数据库中的正确日期(例如2010-04-21)。但是在rich:dataTable中,它显示如下:
因此,相差1天!
我添加了“f:convertDateTime”转换器,并将“type”属性设置为“both”以同时显示时间。所以现在它显示:
我使用的“f:convertDateTime”代码:
<f:convertDateTime locale="locale.US" type="both" dateStyle="short"/>
如此看来,f:convertDateTime似乎在做梦,因为MySQL-table字段中没有时间信息!
我究竟做错了什么?我需要怎么做才能显示正确的日期?
谢谢汤姆
最佳答案
对于日期/时间转换器,JSF缺省为UTC时区。要覆盖此设置,您需要在每个日期/时间转换器中设置timeZone
属性。这是一个使用EDT时区的示例(假设您位于美国东部)。
<f:convertDateTime locale="en_US" type="both" dateStyle="short" timeZone="EDT" />
locale
属性仅控制全天/月名称格式(它将变为英语)。如果要将默认的UTC时区覆盖为操作平台的默认时区,则需要在
web.xml
中添加以下上下文参数:<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
然后,您不需要编辑每个JSF
<f:convertXxx>
标记。10-05 18:41