You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2011/03/10 01:48:01 UTC

svn commit: r1080073 - in /wicket/trunk/wicket-datetime/src: main/java/org/apache/wicket/datetime/DateConverter.java test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java

Author: ivaynberg
Date: Thu Mar 10 00:48:01 2011
New Revision: 1080073

URL: http://svn.apache.org/viewvc?rev=1080073&view=rev
Log:
WICKET-3510

Modified:
    wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/datetime/DateConverter.java
    wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java

Modified: wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/datetime/DateConverter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/datetime/DateConverter.java?rev=1080073&r1=1080072&r2=1080073&view=diff
==============================================================================
--- wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/datetime/DateConverter.java (original)
+++ wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/datetime/DateConverter.java Thu Mar 10 00:48:01 2011
@@ -94,31 +94,27 @@ public abstract class DateConverter impl
 		if (applyTimeZoneDifference)
 		{
 			TimeZone zone = getClientTimeZone();
-			// instantiate now/ current time
-			MutableDateTime dt = new MutableDateTime(new DateMidnight());
-			if (zone != null)
-			{
-				// set time zone for client
-				format = format.withZone(DateTimeZone.forTimeZone(zone));
-				dt.setZone(DateTimeZone.forTimeZone(zone));
-			}
+			DateTime dateTime = null;
+			
+			// set time zone for client
+			format = format.withZone(getTimeZone());				
+
 			try
 			{
 				// parse date retaining the time of the submission
-				int result = format.parseInto(dt, value, 0);
-				if (result < 0)
-				{
-					throw new ConversionException(new ParseException("unable to parse date " +
-						value, ~result));
-				}
+				dateTime = format.parseDateTime(value);				
 			}
 			catch (RuntimeException e)
 			{
 				throw new ConversionException(e);
 			}
 			// apply the server time zone to the parsed value
-			dt.setZone(getTimeZone());
-			return dt.toDate();
+			if (zone != null)
+			{
+				dateTime = dateTime.withZoneRetainFields(DateTimeZone.forTimeZone(zone));
+			}			
+			
+			return dateTime.toDate();
 		}
 		else
 		{

Modified: wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java?rev=1080073&r1=1080072&r2=1080073&view=diff
==============================================================================
--- wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java (original)
+++ wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java Thu Mar 10 00:48:01 2011
@@ -26,6 +26,7 @@ import java.util.TimeZone;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.datetime.StyleDateConverter;
 import org.apache.wicket.extensions.yui.calendar.DateTimeField.AM_PM;
 import org.apache.wicket.protocol.http.request.WebClientInfo;
 import org.apache.wicket.util.tester.DiffUtil;
@@ -172,7 +173,13 @@ public class DatePickerTest extends Wick
 		// for more info see org.joda.time.DateTimeZone.getDefault()
 		assertSame(origJodaDef, newJodaDef);
 	}
-
+	
+	/**
+	 * Test date conversion with the server having a different current date than the client time
+	 * zone.
+	 * 
+	 * @throws ParseException
+	 */
 	public void testDifferentDateTimeZoneConversion() throws ParseException
 	{
 		log.error("=========== testDifferentDateTimeZoneConversion() =================");
@@ -215,7 +222,35 @@ public class DatePickerTest extends Wick
 		DateTimeZone.setDefault(origJodaDef);
 	}
 
+	public void testStyleDateConverterTimeZoneDifference() throws ParseException
+	{
+		TimeZone origJvmDef = TimeZone.getDefault();
+		DateTimeZone origJodaDef = DateTimeZone.getDefault();
+		TimeZone tzClient = TimeZone.getTimeZone("Etc/GMT-14");
+		TimeZone tzServer = TimeZone.getTimeZone("Etc/GMT+12");
+
+		TimeZone.setDefault(tzServer);
+		DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer));
+		Locale.setDefault(Locale.GERMAN);
+
+		WebClientInfo clientInfo = (WebClientInfo)tester.getSession().getClientInfo();
+		clientInfo.getProperties().setTimeZone(tzClient);
+
+		StyleDateConverter converter = new StyleDateConverter(true);
+
+		Calendar cal = Calendar.getInstance(tzClient);
+		cal.set(2011, 10, 5, 0, 0, 0);
+		cal.set(Calendar.MILLISECOND, 0);
+
+		Date dateRef = cal.getTime();
+		Date date = converter.convertToObject("11/05/2011", Locale.GERMAN);
+		log.error("ref: " + dateRef.getTime() + "; converted: " + date.getTime());
+		log.error("ref: " + dateRef + "; date: " + date);
+		assertEquals(0, dateRef.compareTo(date));
 
+		TimeZone.setDefault(origJvmDef);
+		DateTimeZone.setDefault(origJodaDef);
+	}
 	/**
 	 * 
 	 * @throws ParseException
@@ -544,4 +579,4 @@ public class DatePickerTest extends Wick
 
 		DiffUtil.validatePage(document, pageClass, filename, true);
 	}
-}
\ No newline at end of file
+}