为f:convertDateTime设置默认时区

caa*_*os0 36 jsf timezone

我使用JSF1.2,我的时区有点问题.

日历尊重我的时区并在数据库中保存正确的时间.当我使用ah显示它时:输出文本与af:convertDateTime它显示错误的日期(我认为使用默认时区).

我可以这样做:

<h:outputText value="#{atividade.atividade.dataCriacao.time}">
  <f:convertDateTime pattern="#{msg.formatoDataCalendario2}" timeZone="America/Sao_Paulo" />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)

formatoDataCalendario2 = dd/MM/yyyy,HH:mm在messages.properties中.

我也可以将时区放在消息中,但我相信它有一些我可以使用的配置.

Bal*_*usC 91

JSF日期/时间转换器默认按规格指定为UTC时区.如果你想使用不同的时区,那么你真的需要自己在转换器中指定它.或者,如果您对生产运行时环境有100%的控制权,那么从JSF 2.0开始,您可以将其系统时区设置为所需的时区,并将以下上下文参数添加到web.xml:

<context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

这样,JSF将使用系统的时区TimeZone#getDefault()作为转换器的默认时区获得.

请注意,java.util.Date对象本身也不存储任何时区信息.它也始终默认为UTC时区.处理提交的日期/时间时请记住这一点.

也可以看看:

  • Caarlos写道他正在使用JSF 1.2.据我所知,javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE自JSF 2.0起作用.这个解决方案对JSF 1.2真的有效吗?谢谢@BalusC. (6认同)
  • @Infragile:嗯,我一定忽略了这个问题中的陈述:o确实是JSF 2.x.对于JSF 1.x,您需要在每个`<f:convertDateTime>`标记中明确指定`timeZone`属性,或者扩展`DateTimeConverter`类并将其用作`<f:converter>`. (4认同)