f:convertDateTime 显示错误的日期 [重复]
Posted
技术标签:
【中文标题】f:convertDateTime 显示错误的日期 [重复]【英文标题】:f:convertDateTime displays wrong Date [duplicate] 【发布时间】:2011-02-10 23:12:37 【问题描述】:在我的 Web 应用程序中,我使用 Hibernate 检索数据并将其显示在 RichFaces 数据表中。
在我的 mysql 表中有一个“日期”类型的字段。当我将此字段打印到我的 Bean 中的日志时,它会显示数据库中的正确日期(例如 2010-04-21)。但在 rich:dataTable 中显示如下:
2010 年 4 月 20 日
所以有 1 天的差异!
我添加了“f:convertDateTime”转换器并将“type”属性设置为“both”以便也显示时间。所以现在它显示:
2010 年 4 月 20 日晚上 10:00:00
我使用过的“f:convertDateTime”代码:
<f:convertDateTime locale="locale.US" type="both" dateStyle="short"/>
所以 f:convertDateTime 似乎做了一些梦,因为 MySQL 表字段中没有时间信息!
我做错了什么?我需要做什么才能显示正确的日期?
谢谢汤姆
【问题讨论】:
【参考方案1】:对于日期/时间转换器,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>
标签。
【讨论】:
上下文参数在 JSF 2.0 之前不起作用,是吗?相关文章:planet.jboss.org/post/step_right_up_and_select_your_time_zone @Mulmoth:没错,但这绝对不会对 OP 造成问题,因为问题标签暗示他/她已经在使用 JSF 2.0。 你说得对,我没看到标签。 也为我工作。我不是 OP 但同样的问题和 JSF2 。只能 +1 :( BalusC @Java:很好:) 不客气。【参考方案2】:根据 JSF 规范,f:convertDateTime 默认为 UTC 时区(无论任何 VM 时区设置如何),它与您的时区相差 -1 小时(标准时间)或 -2 小时(夏令时)。
我们使用具有 timeZone 属性的应用程序范围的页面 bean,如下所示:
public TimeZone getTimeZone()
return TimeZone.getDefault();
然后我们在 EL 表达式中使用该属性:
<ice:outputText value="#deliveryDate">
<f:convertDateTime type="both" timeZone="#Application.timeZone" />
</ice:outputText>
优点是它会自动考虑标准/夏令时间。
【讨论】:
+1,类似的方式可以为不同时区的用户显示当地时间【参考方案3】:您的时区可能有问题。
Check this article 了解如何解决它们。
在此之前,可以尝试显式设置<f:convertDataTime>
的timeZone
属性
【讨论】:
我尝试设置我们遇到了同样的问题,最终编写了一个新的 JSF 转换器,该转换器使用使用 new SimpleDateFormat(String pattern)
创建的 SimpleDateFormat 进行日期转换。
【讨论】:
【参考方案5】:<h:outputText id="dateId" value="#item.date">
<f:convertDateTime for="dateId" type="date" dateStyle="long" locale="pl"/> </h:outputText>
【讨论】:
以上是关于f:convertDateTime 显示错误的日期 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
f:convertDateTime 支持 Java8 LocalDate / LocalDateTime? [复制]
JSF:<f:convertDateTime type="date" pattern="mm/DD/yyyy"/>
Jquery datepicker显示闰年的错误日期[关闭]