primefaces calendar: wrong date entry

2020-06-03 03:07发布

问题:

Using jsf 2.2.0.

For all the date, it seems to remove one day. When I click on 8 nov, it displays 11/08/2011. But then it stores Nov 7, 2011 in my Date field in my managed bean.

I live in singapore, wondering if it's an issue with the timezone.

回答1:

try adding this to your web.xml

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


回答2:

If you are using primefaces 5, in your scheduler :

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


回答3:

Adding the argument -Duser.timezone=UTC to the startup parameters fixed problem for me.

To summarize: p:schedule work only well when following parameters are sets:

-Duser.timezone=UTC

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


回答4:

I have just added the following parameter in web.xml and the issue is fixed. I didn't include any command like -Duser.timezone=UTC while starting the server, still its fixed the issue.

javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE true

Regards Khaleel



回答5:

I'm using Wildfly 8 and PF 5.0.RC1 and the only thing that did the trick for me was setting the Timezone of the calendar to nothing...

<p:calendar timeZone = "" />

Don't know if this is a proper solution, seems more like a workaround, but it worked fine locally and deployed.



回答6:

Maybe it is because you didn't insert the hours. For example in this case

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

the hour will come as 00:00 of the actual day. And because the timezone (-02:00), the hour will appear as 22:00 of the day before the actual day. The correct thing to do is

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

The hour will appear, so the timezone will make the correct calculations



回答7:

In your calendar component, add a converter and indicate your timezone e.g

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


回答8:

Have you tried to set the timezone and locate attribute? Otherwise, you can create a converter object that converts the date. This is a tutorial to create a custom converter: http://www.roseindia.net/jsf/customconverter.shtml