使用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小时更多。
它可能是时区?我怎样才能解决这个问题?
答
当与时区的工作,一个好的策略是:
- 存储日期与默认的时区。我个人更喜欢使用UTC时区为我的tomcat,mysql等,虽然这不是真的必要
- 处理视图中的时区本地化。在primefaces大多数日期相关的组件,如
calendar
或schedule
将使用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变化。
首先,我没有使用快速失败的java.util.Date API,但是在这种情况下,我无法在仅有单个XHTML文件的空白游乐场项目上重现此问题。我也尝试过一个真正的应用程序。小时和分钟显示在'