12

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.

4
  • 1
    Could be. If not, it can be a problem of Primefaces. It is quite buggy... Anyway, don't use Date-s, use Calendar-s instead. Commented Nov 6, 2011 at 9:51
  • A Date field can't even store a specific date. All it stores is an integer. There are different ways of transating that integer to a date, which is where your problem is coming from. Commented Nov 7, 2011 at 14:14
  • @zeller I am interested in your recommendation not to use java.util.Date. Why is this? Commented Oct 25, 2013 at 14:59
  • 1
    @7SpecialGems: see this post: stackoverflow.com/questions/1404210/java-date-vs-calendar Commented Oct 26, 2013 at 7:22

8 Answers 8

25

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> 
Sign up to request clarification or add additional context in comments.

2 Comments

Its definitely a timezone issue. You may (should be) running your server in UTC. Primefaces will regionalize your date and convert it to the user time. You can, and probably should, run your server with "-Duser.timezone=UTC". The context param should fix it.
Confirmed, timezone issue. The context param fixed it (JSF 2.2.5, PrimeFaces 4.0).
2

If you are using primefaces 5, in your scheduler :

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

Comments

0

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> 

Comments

0

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

Comments

0

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.

Comments

0

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

Comments

0

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 

Comments

-1

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.