代码之家  ›  专栏  ›  技术社区  ›  Ronaldo Lanhellas

ConvertDateTime未获取web.xml中定义的时区

  •  2
  • Ronaldo Lanhellas  · 技术社区  · 10 年前

    我正在使用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进行转换,我不知道这是否是问题所在。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    我使用的是JSF 1.2

    上面提到的上下文参数是在JSF2.0中引入的。它在JSF1.x中不可用。 Set a default time zone for f:convertDateTime 换言之,它只是从未被使用过。将其移除以避免混淆。

    您有两个选项:

    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: 转换日期时间> 用它。

      <h:xxx ... converter="defaultDateTimeConverter" />