You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2015/05/31 23:18:11 UTC
svn commit: r1682796 - in /poi/trunk/src:
java/org/apache/poi/ss/usermodel/DateUtil.java
testcases/org/apache/poi/ss/usermodel/TestDateUtil.java
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