使用 primefaces 的 converDateTime 中的时区
Time Zone in converDateTime using primefaces
我对 PrimeFaces 组件有疑问。我在页面 http://www.primefaces.org/showcase/ui/input/calendar.xhtml 中有相同的代码
我正在使用仅显示时间的组件。
这是小米代码。
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;
}
问题是当我 运行 应用程序时,日历增加了六个小时。
可能是时区?我该如何解决这个问题?
在处理时区时,一个好的策略是:
- 使用默认时区存储日期。就我个人而言,我更喜欢为我的 tomcat、mysql 等使用 UTC 时区,尽管这并不是真正必要的
- 处理您视图中的时区本地化。在 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 更改。
我对 PrimeFaces 组件有疑问。我在页面 http://www.primefaces.org/showcase/ui/input/calendar.xhtml 中有相同的代码 我正在使用仅显示时间的组件。 这是小米代码。
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;
}
问题是当我 运行 应用程序时,日历增加了六个小时。
在处理时区时,一个好的策略是:
- 使用默认时区存储日期。就我个人而言,我更喜欢为我的 tomcat、mysql 等使用 UTC 时区,尽管这并不是真正必要的
- 处理您视图中的时区本地化。在 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 更改。