2

我正在使用 f:convertDateTime 来格式化数据表中的 dateTime。我在 web.xml 中设置了以下上下文参数,以将时区显式设置为系统时区:

<context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
</context-param>

出于某种原因,我的 convertDateTime 总是得到“GMT”,但正确的时区是“GMT-03:00”。我在测试课上试过这个来查看我的时区:

System.out.println(TimeZone.getDefault().getDisplayName());

这给了我“GMT-03:00”。

我正在使用 JSF 1.2 和 JBoss Seam 2.2,调用 jboss-seam DateTimeConverter 进行此转换,我不知道这是否是问题所在。

4

1 回答 1

3

我正在使用 JSF 1.2

提到的上下文参数是在 JSF 2.0 中引入的。它在 JSF 1.x 中不可用。另请参阅 ao为 f:convertDateTime 设置默认时区。换句话说,它根本就没有被使用过。删除它以避免混淆。

你有 2 个选择:

  1. timeZone在每个<f:convertDateTime>.

    <h:xxx ...>
        <f:convertDateTime ... timeZone="GMT-3" />
    </h:xxx>
    

    如有必要,作为应用程序范围的 bean 属性。

    <h:xxx ...>
        <f:convertDateTime ... timeZone="#{config.timeZone}" />
    </h:xxx>
    

  2. 使用新的默认时区(和其他属性)扩展日期时间转换器。

    public class DefaultDateTimeConverter extends DateTimeConverter {
    
        public DefaultDateTimeConverter() {
            setType("both");
            setTimeZone(TimeZone.getTimeZone("GMT-3"));
        }
    
    }
    

    <converter>
        <converter-id>defaultDateTimeConverter</converter-id>
        <converter-class>com.example.DefaultDateTimeConverter</converter-class>
    </converter>
    

    然后<f:convertDateTime>用它替换。

    <h:xxx ... converter="defaultDateTimeConverter" />
    
于 2016-01-19T14:47:07.717 回答