Patch from René Scheibe from bug #57512 - Fix potential NPE in DateUtil for invalid dates
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1682796 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
44821b1f39
commit
7915b3ce38
@ -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;
|
||||
|
92
src/testcases/org/apache/poi/ss/usermodel/TestDateUtil.java
Normal file
92
src/testcases/org/apache/poi/ss/usermodel/TestDateUtil.java
Normal file
@ -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));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user