为f:convertDateTime设置默认时区

时间:2011-09-20 19:50:27

标签: jsf timezone

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

日历尊重我的时区并在数据库中保存正确的时间。当我使用带有f:convertDateTime的h:outputtext显示它时,它显示错误的日期(我认为使用默认时区)。

我可以做类似的事情:

<h:outputText value="#{atividade.atividade.dataCriacao.time}">
  <f:convertDateTime pattern="#{msg.formatoDataCalendario2}" timeZone="America/Sao_Paulo" />
</h:outputText>

formatoDataCalendario2 = dd / MM / yyyy,HH:mm in messages.properties。

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

3 个答案:

答案 0 :(得分:89)

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>

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

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

另见:

答案 1 :(得分:1)

我遇到过这样的场景。在我的 JSF 应用程序中,我正在使用 @BalusC 指出的:

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

,我在 xhtml 中有:

<f:convertDateTime pattern="dd MMM yyyy - HH:mm:ss" type="date" />

但是,当我收到像 2020-02-18T10:15:20 这样的日期/时间时,这将被转换为 GMT 时间(在 PST 区域对我来说是 8 小时)。所以,它最终会是 2020-02-18T02:15:20。这是因为 convertDateTime 默认将没有时区偏移的日期/时间视为 GMT 时间,因此将其转换为 GMT 时间。

一旦我开始接收偏移量以及 2020-02-18T10:15:20-07:00,我的日期/时间将不再转换为 GMT,因为它会识别出偏移量与 PST 区域偏移量匹配,因此不会转换为 GMT。

希望能有所帮助。

答案 2 :(得分:-5)

要正确显示日期,您只需要在web.xml中进行修改

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

并在您的xhtml文件中

<h:outputText value="#{report.date}">
    <f:convertDateTime pattern="dd-MMM-yyyy" />
</h:outputText>

这是一个时区问题。上下文参数应该修复它。