java - f :convertDateTime displays wrong Date

标签 java hibernate jsf richfaces jsf-2

在我的 Web 应用程序中,我使用 Hibernate 检索数据并将其显示在 RichFaces 数据表中。

在我的 MySQL 表中有一个“日期”类型的字段。当我将此字段打印到我的 Bean 中的日志时,它会显示数据库中的正确日期(例如 2010-04-21)。但在 rich:dataTable 中显示如下:

4/20/10

所以有 1 天的差异!

我添加了“f:convertDateTime”转换器并将“type”属性设置为“both”以便也显示时间。所以现在它显示:

4/20/10 10:00:00 PM

我使用过的“f:convertDateTime”代码:

<f:convertDateTime locale="locale.US" type="both" dateStyle="short"/>

所以 f:convertDateTime 似乎做了一些梦,因为 MySQL 表字段中没有时间信息!

我做错了什么?我需要做什么才能显示正确的日期?

谢谢汤姆

最佳答案

对于日期/时间转换器,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>标记。

关于java - f :convertDateTime displays wrong Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689245/

相关文章:

java - 如何对 JSON 解析进行单元测试

java - 将数组索引号分配给for循环java中的变量

java - java 和 hibernate 的时间

postgresql - Hibernate 进行过多查询

java - 使用 Tomahawk 将数据导出为 PDF 格式?

java - 页面重新加载或更改属性为 null JSF Prime

java - 泛型类型的类参数

java - 我在 : Cookie name "ctx:1420m06d05" is a reserved token 之前从未见过这个错误

mysql - jpa id生成策略,@id默认是auto,mysql默认是IDENTITY,但是我发现生成了一个hibernate_sequence表,为什么?

jsf - f :ajax listener not called for h:selectBooleanCheckbox