[ 
https://issues.apache.org/jira/browse/WICKET-3510?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13010168#comment-13010168
 ] 

Bertrand Guay-Paquet commented on WICKET-3510:
----------------------------------------------

I just realized there is a problem with the design of the TimeField. In order 
to properly convert between the client's and server's time zone, a date 
(day,month,year) for which the conversion is to be done must be provided. 
Otherwise, the conversion cannot happen since we can't determine whether we 
should consider the time zones with or without daylight savings. Currently, 
TimeField does the conversion using the current date but this is not valid.

Continuing investigation...

> DateTimeField improperly converts time causing wrong dates when the server's 
> current date is different from the client's date.
> ------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: WICKET-3510
>                 URL: https://issues.apache.org/jira/browse/WICKET-3510
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-datetime
>    Affects Versions: 1.5-RC2
>            Reporter: Bertrand Guay-Paquet
>              Labels: datepicker, datetime
>             Fix For: 1.5-RC3
>
>         Attachments: DateConverterFix.patch, FailingTest.patch, 
> TestDateConverter.java, dateModelConversionFix.patch, 
> doubleConversionFix.patch, testsWithDateModels.patch
>
>
> The bug is in DateTimeField#convertInput().
> <code>
> // Get year, month and day ignoring any timezone of the Date object
> Calendar cal = Calendar.getInstance();
> cal.setTime(dateFieldInput);
> int year = cal.get(Calendar.YEAR);
> int month = cal.get(Calendar.MONTH) + 1;
> int day = cal.get(Calendar.DAY_OF_MONTH);
> int hours = (hoursInput == null ? 0 : hoursInput % 24);
> int minutes = (minutesInput == null ? 0 : minutesInput);
> // Use the input to create a date object with proper timezone
> MutableDateTime date = new MutableDateTime(year, month, day, hours, minutes, 
> 0, 0,
>       DateTimeZone.forTimeZone(getClientTimeZone()));
> </code>
> If the server's current date is different from the client's, this produces 
> wrong output. I attached a patch with a test case that simulates this 
> condition.
> I don't know why this "casting" of day, month, year is done.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to