You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2015/07/02 14:17:55 UTC

svn commit: r1688811 - in /directory/shared/trunk/util/src: main/java/org/apache/directory/api/util/GeneralizedTime.java test/java/org/apache/directory/api/util/GeneralizedTimeTest.java

Author: elecharny
Date: Thu Jul  2 12:17:55 2015
New Revision: 1688811

URL: http://svn.apache.org/r1688811
Log:
Using a Math.floor instead of Math.round to avoid an error when the fraction is like .9995 (See DIRAPI-241).

Modified:
    directory/shared/trunk/util/src/main/java/org/apache/directory/api/util/GeneralizedTime.java
    directory/shared/trunk/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java

Modified: directory/shared/trunk/util/src/main/java/org/apache/directory/api/util/GeneralizedTime.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/util/src/main/java/org/apache/directory/api/util/GeneralizedTime.java?rev=1688811&r1=1688810&r2=1688811&view=diff
==============================================================================
--- directory/shared/trunk/util/src/main/java/org/apache/directory/api/util/GeneralizedTime.java (original)
+++ directory/shared/trunk/util/src/main/java/org/apache/directory/api/util/GeneralizedTime.java Thu Jul  2 12:17:55 2015
@@ -422,7 +422,7 @@ public class GeneralizedTime implements
         upFractionLength = fraction.length();
 
         double fract = Double.parseDouble( "0." + fraction );
-        int millisecond = ( int ) Math.round( fract * 1000 );
+        int millisecond = ( int ) Math.floor( fract * 1000 );
 
         calendar.set( Calendar.MILLISECOND, millisecond );
     }

Modified: directory/shared/trunk/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java?rev=1688811&r1=1688810&r2=1688811&view=diff
==============================================================================
--- directory/shared/trunk/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java (original)
+++ directory/shared/trunk/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java Thu Jul  2 12:17:55 2015
@@ -24,8 +24,13 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assert.assertThat;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
 
+import java.text.DateFormat;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.TimeZone;
@@ -1209,4 +1214,18 @@ public class GeneralizedTimeTest
         assertEquals( "The time after round trip GeneralizedTime generation should stay the same",
             originalTime, recalculatedTime );
     }
+    
+    static DateFormat FORMAT = new SimpleDateFormat( "dd/MM/yyyy HH:mm:ss.SSSS z" );
+    
+    @Test
+    public void fractionCloseToOne() throws ParseException
+    {
+        GeneralizedTime close = new GeneralizedTime( "20000101000000.9994Z" );
+        
+        assertThat( close.getDate(), is( equalTo( FORMAT.parse( "01/01/2000 00:00:00.999 GMT" ) ) ) );
+        
+        GeneralizedTime closer = new GeneralizedTime( "20000101000000.9995Z" );
+        
+        assertThat( closer.getDate(), is( equalTo( FORMAT.parse( "01/01/2000 00:00:00.999 GMT" ) ) ) );
+    }
 }
\ No newline at end of file