为了账号安全,请及时绑定邮箱和手机立即绑定

JSF convertDateTime呈现前一天

JSF convertDateTime呈现前一天

泛舟湖上清波郎朗 2019-11-18 10:27:47
日期(作为Date时间类型)存储在数据库中,如下所示:31.10.2012当在UI中显示日期时,默认情况下呈现为该日期:2012-10-31我使用进行了转换,但<f:convertDateTime pattern="dd.MM.yyyy" />意外地变成了30.10.2012的SimpleDateconverter,供给具有相同的日期和相同的格式字符串返回31.10.2012,如所预期。我想念什么?谢谢编辑:对于存储为Timestamp相同转换的日期会产生正确的结果,因此我想它与Date解释为确切的午夜有关系,而确切的午夜又可能被解释为属于2个不同的日期。但是我仍然不知道在哪里定义行为以及什么是最佳解决方法。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

无疑,这是一个与时区有关的问题。


在日期/时间转换中,JSF默认为GMT(UTC)。因此,如果您的服务器平台默认时区为GMT + X(而不是GMT-X),则时间将回到过去的X小时。如果时间已经是00:00:00(午夜),则日期甚至可以追溯到过去的一天。


无论如何,有2种标准方法可以满足您的功能要求:


通过将以下上下文参数添加到JSF,告诉JSF使用服务器平台默认时区代替所有日期/时间转换web.xml:


<context-param>

    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>

    <param-value>true</param-value>

</context-param>

更改每个<f:convertDateTime>以明确指定特定于Webapp的时区。由于您居住在德国,并且日期格式也证实了这一点,因此我假设您是CET。


<f:convertDateTime ... timeZone="CET" />

无论如何,不建议在整个应用程序中使用非通用甚至混合时区。建议将所有层和环境中的时区设置为UTC。不仅在服务器,前端层和表示层中,而且在SQL数据库以及后端层和持久性层中。这样,代码对时区和与DST(!)相关的事项不敏感,并且仅在必要时您可以专注于仅在演示过程中更改时区。


查看完整回答
反对 回复 2019-11-18
  • 1 回答
  • 0 关注
  • 334 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信