使用primefaces的converDateTime中的时区

问题描述:

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

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; 
} 

问题是,当我运行应用程序,日历是addig6小时更多。

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

+0

首先,我没有使用快速失败的java.util.Date API,但是在这种情况下,我无法在仅有单个XHTML文件的空白游乐场项目上重现此问题。我也尝试过一个真正的应用程序。小时和分钟显示在'

'上,正如它们通过''输入一样,而不设置与''关联的'timeZone'属性。 – Tiny 2015-04-02 04:22:25

当与时区的工作,一个好的策略是:

  • 存储日期与默认的时区。我个人更喜欢使用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和年,月,日的默认today。确保这不会成为DST的问题。总是测试你的应用程序的DST变化。