Looly 5 年之前
父节点
当前提交
394d05f9d2

+ 1 - 0
CHANGELOG.md

@@ -11,6 +11,7 @@
 
 ### Bug修复
 * 【core   】     修复DateUtil.current使用System.nanoTime的问题(issue#1198@Github)
+* 【core   】     修复Excel03SaxReader判断日期出错问题(issue#I23M9H@Gitee)
 
 -------------------------------------------------------------------------------------------------------------
 

+ 0 - 4
hutool-core/src/main/java/cn/hutool/core/date/DateTime.java

@@ -648,10 +648,6 @@ public class DateTime extends Date {
 		return new Date(this.getTime());
 	}
 
-	public Date writeReplace(){
-		return toJdkDate();
-	}
-
 	/**
 	 * 转为{@link Timestamp}
 	 *

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

@@ -1,6 +1,5 @@
 package cn.hutool.poi.excel.sax;
 
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -306,11 +305,9 @@ public class Excel03SaxReader implements HSSFListener, ExcelSaxReader<Excel03Sax
 				break;
 			case NumberRecord.sid: // 数字类型
 				final NumberRecord numrec = (NumberRecord) record;
-				final String formatString = formatListener.getFormatString(numrec);
-				if(false == StrUtil.contains(formatString, '%') &&
-						false == "General".equalsIgnoreCase(formatString)){
+				if(ExcelSaxUtil.isDateFormat(numrec, formatListener)){
 					// 可能为日期格式
-					value = DateUtil.date(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(numrec.getValue()));
+					value = ExcelSaxUtil.getDateValue(numrec.getValue());
 				} else {
 					final double doubleValue = numrec.getValue();
 					final long longPart = (long) doubleValue;

+ 15 - 0
hutool-poi/src/main/java/cn/hutool/poi/excel/sax/ExcelSaxUtil.java

@@ -7,6 +7,8 @@ import cn.hutool.core.io.IORuntimeException;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.poi.excel.sax.handler.RowHandler;
 import cn.hutool.poi.exceptions.POIException;
+import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;
+import org.apache.poi.hssf.record.NumberRecord;
 import org.apache.poi.ooxml.util.SAXHelper;
 import org.apache.poi.ss.usermodel.DataFormatter;
 import org.apache.poi.xssf.model.SharedStringsTable;
@@ -172,6 +174,19 @@ public class ExcelSaxUtil {
 	}
 
 	/**
+	 * 判断数字Record中是否为日期格式
+	 * @param numrec 单元格记录
+	 * @param formatListener {@link FormatTrackingHSSFListener}
+	 * @return 是否为日期格式
+	 * @since 5.4.8
+	 */
+	public static boolean isDateFormat(NumberRecord numrec, FormatTrackingHSSFListener formatListener){
+		final int formatIndex = formatListener.getFormatIndex(numrec);
+		final String formatString = formatListener.getFormatString(numrec);
+		return org.apache.poi.ss.usermodel.DateUtil.isADateFormat(formatIndex, formatString);
+	}
+
+	/**
 	 * 获取日期
 	 *
 	 * @param value 单元格值