poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r1682796 - in /poi/trunk/src: java/org/apache/poi/ss/usermodel/DateUtil.java testcases/org/apache/poi/ss/usermodel/TestDateUtil.java
Date Sun, 31 May 2015 21:18:11 GMT
Author: nick
Date: Sun May 31 21:18:11 2015
New Revision: 1682796

URL: http://svn.apache.org/r1682796
Log:
Patch from René Scheibe from bug #57512 - Fix potential NPE in DateUtil for invalid dates

Added:
    poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDateUtil.java
Modified:
    poi/trunk/src/java/org/apache/poi/ss/usermodel/DateUtil.java

Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/DateUtil.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/DateUtil.java?rev=1682796&r1=1682795&r2=1682796&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/DateUtil.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/DateUtil.java Sun May 31 21:18:11 2015
@@ -146,7 +146,7 @@ public class DateUtil {
      *  @return Java representation of the date, or null if date is not a valid Excel date
      */
     public static Date getJavaDate(double date, TimeZone tz) {
-       return getJavaDate(date, false, tz);
+       return getJavaDate(date, false, tz, false);
     }
     /**
      *  Given an Excel date with using 1900 date windowing, and
@@ -166,9 +166,9 @@ public class DateUtil {
      *  @see java.util.TimeZone
      */
     public static Date getJavaDate(double date) {
-        return getJavaDate(date, (TimeZone)null);
+        return getJavaDate(date, false, null, false);
     }
-    
+
     /**
      *  Given an Excel date with either 1900 or 1904 date windowing,
      *  converts it to a java.util.Date.
@@ -185,7 +185,7 @@ public class DateUtil {
      *  @return Java representation of the date, or null if date is not a valid Excel date
      */
     public static Date getJavaDate(double date, boolean use1904windowing, TimeZone tz) {
-        return getJavaCalendar(date, use1904windowing, tz, false).getTime();
+        return getJavaDate(date, use1904windowing, tz, false);
     }
     
     /**
@@ -205,7 +205,8 @@ public class DateUtil {
      *  @return Java representation of the date, or null if date is not a valid Excel date
      */
     public static Date getJavaDate(double date, boolean use1904windowing, TimeZone tz, boolean
roundSeconds) {
-        return getJavaCalendar(date, use1904windowing, tz, roundSeconds).getTime();
+        Calendar calendar = getJavaCalendar(date, use1904windowing, tz, roundSeconds);
+        return calendar == null ? null : calendar.getTime();
     }
     
     /**
@@ -228,10 +229,9 @@ public class DateUtil {
      *  @see java.util.TimeZone
      */
     public static Date getJavaDate(double date, boolean use1904windowing) {
-        return getJavaCalendar(date, use1904windowing, null, false).getTime();
+        return getJavaDate(date, use1904windowing, null, false);
     }
 
-
     public static void setCalendar(Calendar calendar, int wholeDays,
             int millisecondsInDay, boolean use1904windowing, boolean roundSeconds) {
         int startYear = 1900;

Added: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDateUtil.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDateUtil.java?rev=1682796&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDateUtil.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDateUtil.java Sun May 31 21:18:11
2015
@@ -0,0 +1,92 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.ss.usermodel;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.junit.Test;
+
+public class TestDateUtil {
+
+    @Test
+    public void getJavaDate_InvalidValue() {
+        double dateValue = -1;
+        TimeZone tz = TimeZone.getDefault();
+        boolean use1904windowing = false;
+        boolean roundSeconds = false;
+
+        assertEquals(null, DateUtil.getJavaDate(dateValue));
+        assertEquals(null, DateUtil.getJavaDate(dateValue, tz));
+        assertEquals(null, DateUtil.getJavaDate(dateValue, use1904windowing));
+        assertEquals(null, DateUtil.getJavaDate(dateValue, use1904windowing, tz));
+        assertEquals(null, DateUtil.getJavaDate(dateValue, use1904windowing, tz, roundSeconds));
+    }
+
+    @Test
+    public void getJavaDate_ValidValue() {
+        double dateValue = 0;
+        TimeZone tz = TimeZone.getDefault();
+        boolean use1904windowing = false;
+        boolean roundSeconds = false;
+
+        Calendar calendar = Calendar.getInstance(tz);
+        calendar.set(1900, 0, 0, 0, 0, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        Date date = calendar.getTime();
+
+        assertEquals(date, DateUtil.getJavaDate(dateValue));
+        assertEquals(date, DateUtil.getJavaDate(dateValue, tz));
+        assertEquals(date, DateUtil.getJavaDate(dateValue, use1904windowing));
+        assertEquals(date, DateUtil.getJavaDate(dateValue, use1904windowing, tz));
+        assertEquals(date, DateUtil.getJavaDate(dateValue, use1904windowing, tz, roundSeconds));
+    }
+
+    @Test
+    public void getJavaCalendar_InvalidValue() {
+        double dateValue = -1;
+        TimeZone tz = TimeZone.getDefault();
+        boolean use1904windowing = false;
+        boolean roundSeconds = false;
+
+        assertEquals(null, DateUtil.getJavaCalendar(dateValue));
+        assertEquals(null, DateUtil.getJavaCalendar(dateValue, use1904windowing));
+        assertEquals(null, DateUtil.getJavaCalendar(dateValue, use1904windowing, tz));
+        assertEquals(null, DateUtil.getJavaCalendar(dateValue, use1904windowing, tz, roundSeconds));
+    }
+
+    @Test
+    public void getJavaCalendar_ValidValue() {
+        double dateValue = 0;
+        TimeZone tz = TimeZone.getDefault();
+        boolean use1904windowing = false;
+        boolean roundSeconds = false;
+
+        Calendar calendar = Calendar.getInstance(tz);
+        calendar.set(1900, 0, 0, 0, 0, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+
+        assertEquals(calendar, DateUtil.getJavaCalendar(dateValue));
+        assertEquals(calendar, DateUtil.getJavaCalendar(dateValue, use1904windowing));
+        assertEquals(calendar, DateUtil.getJavaCalendar(dateValue, use1904windowing, tz));
+        assertEquals(calendar, DateUtil.getJavaCalendar(dateValue, use1904windowing, tz,
roundSeconds));
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message