【问题标题】:JSF page reflects Date incorrectly - 1 Day shifted [duplicate]JSF 页面错误地反映了日期 - 1 天偏移 [重复]
【发布时间】:2011-09-08 19:07:13
【问题描述】:

Date 的 DB 值为:

04-OCT-10

Bean 方法返回:

Mon Oct 04 00:00:00 EEST 2010

JSF 返回:

03.10.2010

JSF 代码:

...
     <h:outputText value="#{paym.dueDate}" >
            <f:convertDateTime pattern="dd.MM.yyyy"/>
     </h:outputText>
...

JSF 显示日期值不正确的原因是什么?

谢谢

【问题讨论】:

    标签: jsf date converter


    【解决方案1】:

    JSF 日期转换器默认为 UTC 时区。但是您的日期显然是使用 EEST 时区存储的,该时区比 UTC 时间晚了几个小时(准确地说是 GMT+3)。当使用 UTC 时区解释这些日期时(正如 JSF 默认所做的那样),您将获得几个小时的时间,因此前一天将被表示。

    您需要在&lt;f:convertDateTime&gt; 中明确指定时区:

    <f:convertDateTime pattern="dd.MM.yyyy" timeZone="GMT+3" />
    

    【讨论】:

    • @BalusC 奇怪,没有帮助。如果我将 z 参数添加到 jsf 转换器,它会显示“CEST”区域。
    • 可能对 Java 无效。我不知道所有的时区 ID。尝试 timeZone="CET" 或明确的 GMT+-n,例如 timeZone="GMT+1"
    • 哎呀,按照您的建议设置 CET 后它会显示 CEST,如果没有 CET 参数,它会显示 GMT
    • 我已经测试了 'GMT+3' 的工作,更少的工作。稳定吗?
    • 根据this page 确实是 GMT+3 (UTC+3)。这是否稳定很难说。日期是否也始终在同一时区保存和传输?是否考虑夏令时?等等。最佳实践是一直使用 UTC 并仅在输入/输出期间对其进行格式化。另请参阅Daylight saving time and timezone best practices
    【解决方案2】:

    还要考虑This answer,这可能最适合具有不同夏季/冬季时间的国家/地区,并且您的服务器时区和 jsf 应用程序用户时区都是这样的时区。

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 1970-01-01
      • 2012-09-18
      • 2019-08-02
      • 2023-04-02
      • 1970-01-01
      • 2021-09-17
      • 2015-10-17
      • 1970-01-01
      相关资源
      最近更新 更多