Browse Source

fix sax for date bug

Looly 5 years ago
parent
commit
640312c745

+ 2 - 1
CHANGELOG.md

@@ -36,7 +36,8 @@
 ### Bug修复
 * 【core   】     修复SimpleCache死锁问题(issue#I1HOKB@Gitee)
 * 【core   】     修复SemaphoreRunnable释放问题(issue#I1HLQQ@Gitee)
-* 【poi    】     修复Sax方式读取Excel行号错误问题(issue#882@Gitee)
+* 【poi    】     修复Sax方式读取Excel行号错误问题(issue#882@Github)
+* 【poi    】     修复Sax方式读取Excel日期类型数据03和07不一致问题(issue#I1HL1C@Gitee)
 
 -------------------------------------------------------------------------------------------------------------
 

+ 1 - 1
hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel03SaxReader.java

@@ -308,7 +308,7 @@ public class Excel03SaxReader extends AbstractExcelSaxReader<Excel03SaxReader> i
 					value = numrec.getValue();
 				} else if (formatString.contains(StrUtil.SLASH) || formatString.contains(StrUtil.COLON)) {
 					//日期
-					value = formatListener.formatNumberDateCell(numrec);
+					value = ExcelSaxUtil.getDateValue(numrec.getValue());
 				} else {
 					final double doubleValue = numrec.getValue();
 					final long longPart = (long) doubleValue;

+ 13 - 2
hutool-poi/src/main/java/cn/hutool/poi/excel/sax/ExcelSaxUtil.java

@@ -170,10 +170,21 @@ public class ExcelSaxUtil {
 	 *
 	 * @param value 单元格值
 	 * @return 日期
+	 * @since 5.3.6
+	 */
+	public static DateTime getDateValue(String value) {
+		return getDateValue(Double.parseDouble(value));
+	}
+
+	/**
+	 * 获取日期
+	 *
+	 * @param value 单元格值
+	 * @return 日期
 	 * @since 4.1.0
 	 */
-	private static DateTime getDateValue(String value) {
-		return DateUtil.date(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(Double.parseDouble(value), false));
+	public static DateTime getDateValue(double value) {
+		return DateUtil.date(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value, false));
 	}
 
 	/**

+ 3 - 2
hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelSaxReadTest.java

@@ -103,8 +103,9 @@ public class ExcelSaxReadTest {
 	}
 
 	@Test
+	@Ignore
 	public void dateReadTest(){
-		ExcelUtil.readBySax("d:/test/sax_test.xls", 0, (RowHandler) (i, i1, list) ->
+		ExcelUtil.readBySax("d:/test/sax_date_test.xlsx", 0, (i, i1, list) ->
 				Console.log(StrUtil.join(", ", list)));
-	};
+	}
 }