使用primefaces在converDateTime中的时区

时间:2015-04-01 21:37:07

标签: jsf jsf-2 primefaces calendar timezone

我有一个PrimeFaces组件的问题。我有与页面http://www.primefaces.org/showcase/ui/input/calendar.xhtml中相同的代码 我使用的组件只显示时间。 这是mi代码。

Time.xhtml

<h:form id="form">

    <p:growl id="msgs" showDetail="true" />

    <h:panelGrid columns="2" cellpadding="5">

        <p:outputLabel for="time" value="Time:" />
        <p:calendar id="time" value="#{calendarView.date11}" pattern="HH:mm a" timeOnly="true"  />
    </h:panelGrid>

    <p:commandButton value="Submit" update="msgs" actionListener="#{calendarView.click}" icon="ui-icon-check" />

    <p:dialog modal="true" resizable="false" header="Values" widgetVar="dlg" showEffect="fold">
        <p:panelGrid id="display" columns="2" columnClasses="label,value">

            <h:outputText value="Time:" />
            <h:outputText value="#{calendarView.date11}">
                <f:convertDateTime pattern="HH:mm a" />
            </h:outputText>
        </p:panelGrid>
    </p:dialog>
</h:form>

这是我的豆子。

CalendarView.java

private Date date11;

public void click() {
    RequestContext requestContext = RequestContext.getCurrentInstance();

    requestContext.update("form:display");
    requestContext.execute("PF('dlg').show()");
}

public Date getDate11() {
    return date11;
}

public void setDate11(Date date11) {
    this.date11 = date11;
}

问题是当我运行应用程序时,日历会增加6个小时。

enter image description here 它可能是时区?我该怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用时区时,一个好的策略是:

  • 使用默认时区存储日期。我个人更喜欢使用UTC时区为我的tomcat,mysql等,虽然这不是必要的
  • 处理视图中的时区本地化。在primefaces中,大多数与日期相关的组件(如calendarschedule)将使用timeZone属性,该属性将处理日期转换为本地时间,白天节省时间(DST)等。

例如:

<p:calendar id="time" value="#{calendarView.date11}" pattern="HH:mm"
    timeOnly="true" 
    timeZone="Europe/Warsaw" />

确保提供时区字符串键而不是UTC / GMT偏移量。 您可以找到您的时区密钥here

最后一件事:当使用timeOnly属性时,您的p:calendar仍将存储java.util.Date,而Year,Month和Day将默认为today。确保这不会成为DST的问题。始终测试您的应用以获取DST更改。