Author: adrianc
Date: Sat Apr 26 21:28:07 2014
New Revision: 1590301

URL: http://svn.apache.org/r1590301
Log:
Improved some converters to strip the time-of-day from java.sql.Date values. 
This will help prevent JDBC drivers from changing the date when stored.

Modified:
    
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java
    
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/DateTimeTests.java

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java?rev=1590301&r1=1590300&r2=1590301&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java
 (original)
+++ 
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java
 Sat Apr 26 21:28:07 2014
@@ -119,7 +119,11 @@ public class DateTimeConverters implemen
         }
 
         public java.sql.Date convert(java.util.Date obj) throws 
ConversionException {
-            return new java.sql.Date(obj.getTime());
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(obj);
+            cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 
cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+            cal.set(Calendar.MILLISECOND, 0);
+            return new java.sql.Date(cal.getTimeInMillis());
         }
     }
 
@@ -304,7 +308,11 @@ public class DateTimeConverters implemen
         }
 
         public java.sql.Date convert(Number obj) throws ConversionException {
-             return new java.sql.Date(obj.longValue());
+            Calendar cal = Calendar.getInstance();
+            cal.setTimeInMillis(obj.longValue());
+            cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 
cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+            cal.set(Calendar.MILLISECOND, 0);
+            return new java.sql.Date(cal.getTimeInMillis());
         }
     }
 

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/DateTimeTests.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/DateTimeTests.java?rev=1590301&r1=1590300&r2=1590301&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/DateTimeTests.java
 (original)
+++ 
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/DateTimeTests.java
 Sat Apr 26 21:28:07 2014
@@ -23,6 +23,8 @@ import org.ofbiz.base.conversion.DateTim
 import org.ofbiz.base.lang.SourceMonitored;
 import org.ofbiz.base.test.GenericTestCaseBase;
 
+import com.ibm.icu.util.Calendar;
+
 @SourceMonitored
 public class DateTimeTests extends GenericTestCaseBase {
 
@@ -36,24 +38,38 @@ public class DateTimeTests extends Gener
     }
 
     public void testDateTimeConverters() throws Exception {
+        Calendar cal = Calendar.getInstance();
+        long currentTime = cal.getTimeInMillis();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 
cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        long longTime = cal.getTimeInMillis(); // Start of day today
+        assertNotEquals("currentTime and longTime are not equal", currentTime, 
longTime);
+        java.util.Date utilDate = new java.util.Date(longTime);
+        java.sql.Date sqlDate = new java.sql.Date(longTime);
+        java.sql.Timestamp timestamp = new java.sql.Timestamp(longTime);
         // Source class = java.util.Date
-        long currentTime = System.currentTimeMillis();
-        java.util.Date utilDate = new java.util.Date(currentTime);
-        assertConversion("DateToLong", new DateTimeConverters.DateToLong(), 
utilDate, currentTime);
-        assertConversion("DateToSqlDate", new 
DateTimeConverters.DateToSqlDate(), utilDate, new java.sql.Date(currentTime));
+        assertConversion("DateToLong", new DateTimeConverters.DateToLong(), 
utilDate, longTime);
+        assertConversion("DateToSqlDate", new 
DateTimeConverters.DateToSqlDate(), utilDate, new java.sql.Date(longTime));
         assertConversion("DateToString", new 
DateTimeConverters.DateToString(), utilDate, utilDate.toString());
-        //assertConversion("StringToDate", new 
DateTimeConverters.StringToDate(), utilDate.toString(), utilDate);
-        assertConversion("DateToTimestamp", new 
DateTimeConverters.DateToTimestamp(), utilDate, new 
java.sql.Timestamp(currentTime));
+        assertConversion("DateToTimestamp", new 
DateTimeConverters.DateToTimestamp(), utilDate, timestamp);
         // Source class = java.sql.Date
-        java.sql.Date sqlDate = new java.sql.Date(currentTime);
+        assertConversion("SqlDateToLong", new DateTimeConverters.DateToLong(), 
sqlDate, longTime);
         assertConversion("SqlDateToDate", new 
DateTimeConverters.SqlDateToDate(), sqlDate, utilDate);
         assertConversion("SqlDateToString", new 
DateTimeConverters.SqlDateToString(), sqlDate, sqlDate.toString());
-        //assertConversion("StringToSqlDate", new 
DateTimeConverters.StringToSqlDate(), sqlDate.toString(), sqlDate);
-        java.sql.Timestamp timestamp = new java.sql.Timestamp(currentTime);
         assertConversion("SqlDateToTimestamp", new 
DateTimeConverters.SqlDateToTimestamp(), sqlDate, timestamp);
-        assertConversion("StringToTimestamp", new 
DateTimeConverters.StringToTimestamp(), timestamp.toString(), timestamp);
+        // Source class = java.sql.Timestamp
+        assertConversion("TimestampToLong", new 
DateTimeConverters.DateToLong(), timestamp, longTime);
         assertConversion("TimestampToDate", new 
DateTimeConverters.TimestampToDate(), timestamp, utilDate);
         assertConversion("TimestampToSqlDate", new 
DateTimeConverters.TimestampToSqlDate(), timestamp, sqlDate);
-        //assertConversion("TimestampToString", new 
DateTimeConverters.TimestampToString(), timestamp, timestamp.toString());
+        assertConversion("TimestampToString", new 
DateTimeConverters.TimestampToString(), timestamp, timestamp.toString());
+        // Source class = java.lang.Long
+        assertConversion("LongToDate", new DateTimeConverters.NumberToDate(), 
longTime, utilDate);
+        assertConversion("LongToSqlDate", new 
DateTimeConverters.NumberToSqlDate(), longTime, sqlDate);
+        assertConversion("LongToSqlDate", new 
DateTimeConverters.NumberToSqlDate(), currentTime, sqlDate); //Test conversion 
to start of day
+        assertConversion("LongToTimestamp", new 
DateTimeConverters.NumberToTimestamp(), longTime, timestamp);
+        // Source class = java.lang.String
+        assertConversion("StringToTimestamp", new 
DateTimeConverters.StringToTimestamp(), timestamp.toString(), timestamp);
+        //assertConversion("StringToDate", new 
DateTimeConverters.StringToDate(), utilDate.toString(), utilDate);
+        //assertConversion("StringToSqlDate", new 
DateTimeConverters.StringToSqlDate(), sqlDate.toString(), sqlDate);
     }
 }


Reply via email to