2011-11-06 78 views
11

使用jsf 2.2.0。primefaces日历:错误日期条目

对于所有的日期,它似乎删除了一天。当我点击8 nov时,它显示11/08/2011。 但它然后在我的托管bean中的日期字段中存储2011年11月7日。

我住在新加坡,想知道这是否与时区有关。

+1

莫非是。否则,它可能是Primefaces的问题。这是相当麻烦的...不管怎样,不要使用'Date'-s,而是使用'Calendar'-s。 – zeller

+0

日期字段甚至无法存储特定的日期。它存储的是一个整数。将整数转换为日期的方式有多种,这是您的问题来自何处。 – MatsT

+0

@zeller我对你的建议不使用java.util.Date感兴趣。为什么是这样? – 8bitjunkie

回答

23

尝试添加该到你的web.xml

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

它绝对是一个时区问题。您可能(应该)以UTC运行您的服务器。 Primefaces将区分您的日期并将其转换为用户时间。您可以并可能应该使用 “-Duser.timezone = UTC”运行服务器。上下文参数应该修复它。 –

+0

确认,时区问题。上下文参数修复了它(JSF 2.2.5,PrimeFaces 4.0)。 – Gilberto

0

添加参数-Duser.timezone=UTC为我固定的问题启动参数。

总结: 号码:工作时间表以及仅当下面的参数设置:

-Duser.timezone=UTC

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

我刚才添加下列参数web.xml和问题是固定的。在启动服务器时,我没有包含任何类似-Duser.timezone = UTC的命令,但仍然解决了它的问题。

javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE 真正

问候 Khaleel

0

我使用Wildfly 8和PF 5.0.RC1并为我做的是设置时区的招的唯一的事日历不了了之......

<p:calendar timeZone = "" /> 

不知道这是一个妥善的解决办法,似乎更像是一个解决办法,但它在本地运行良好并已部署。

2

如果使用primefaces 5,在你的调度:

<p:schedule ...ignoreTimezone="false" /> 
0

也许是因为你没有插入小时。例如在这种情况下,

<p:calendar id="dateFromCalendar" 
    value="#{platform.frameBean.dateFrom}" showOn="button" 
    pattern="dd-MM-yyyy" timeZone="Europe/Warsaw"> 
</p:calendar> 

小时将作为当天的00:00。由于时区(-02:00),小时将显示为实际日期前一天的22:00。做正确的事情是

<p:calendar id="dateFromCalendar" 
    value="#{platform.frameBean.dateFrom}" showOn="button" 
    pattern="dd-MM-yyyy HH:mm" timeZone="Europe/Warsaw"> 
</p:calendar> 

的时间就会出现,因此时区会做出正确的计算

0

在您的日历组件,添加一个转换器,并注明您的时区如

<p:calendar id="date"> 
    <f:convertDateTime timeZone="Asia/Singapore"></f:convertDateTime> 
</p:calendar