From 9dfac34f691cbd8df8d0489ee44fa9c6a164d521 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 24 Sep 2022 01:04:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DExcelReader=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=8F=98=E6=88=9012=E5=B0=8F=E6=97=B6?= =?UTF-8?q?=E5=BD=A2=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../excel/cell/values/NumericCellValue.java | 11 +++++----- .../java/cn/hutool/poi/IssueI5Q1TWTest.java | 20 ++++++++++++++++++ hutool-poi/src/test/resources/I5Q1TW.xlsx | Bin 0 -> 9230 bytes 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 hutool-poi/src/test/java/cn/hutool/poi/IssueI5Q1TWTest.java create mode 100644 hutool-poi/src/test/resources/I5Q1TW.xlsx diff --git a/CHANGELOG.md b/CHANGELOG.md index b065ac8bb..1384206b2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.8.8.M1 (2022-09-23) +# 5.8.8.M1 (2022-09-24) ### 🐣新特性 * 【core 】 StreamUtil.of方法新增对 Iterator 支持;StreamUtil.of(Iterable) 方法优化(pr#807@Gitee) @@ -19,6 +19,7 @@ * 【core 】 修复ObjectUtil.defaultIfNull去掉误加的deprecated(issue#I5SIZT@Gitee) * 【core 】 修复ReflectUtil 反射方法中桥接判断问题(issue#2625@Github) * 【poi 】 修复ExcelWriter导出List引起的个数混乱问题(issue#2627@Github) +* 【poi 】 修复ExcelReader读取时间变成12小时形式问题(issue#I5Q1TW@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/values/NumericCellValue.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/values/NumericCellValue.java index bf160730e..24c1fc7c6 100755 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/values/NumericCellValue.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/values/NumericCellValue.java @@ -4,11 +4,12 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelDateUtil; import cn.hutool.poi.excel.cell.CellValue; -import java.util.Date; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.util.NumberToTextConverter; +import java.time.LocalDateTime; + /** * 数字类型单元格值
* 单元格值可能为Long、Double、Date @@ -37,10 +38,10 @@ public class NumericCellValue implements CellValue { if (null != style) { // 判断是否为日期 if (ExcelDateUtil.isDateFormat(cell)) { - // 1899年写入会导致数据错乱,读取到1899年证明这个单元格的信息不关注年月日 - Date dateCellValue = cell.getDateCellValue(); - if ("1899".equals(DateUtil.format(dateCellValue, "yyyy"))) { - return DateUtil.format(dateCellValue, style.getDataFormatString()); + final LocalDateTime dateCellValue = cell.getLocalDateTimeCellValue(); + if(1899 == dateCellValue.getYear()){ + // 1899年写入会导致数据错乱,读取到1899年证明这个单元格的信息不关注年月日 + return dateCellValue.toLocalTime(); } // 使用Hutool的DateTime包装 return DateUtil.date(dateCellValue); diff --git a/hutool-poi/src/test/java/cn/hutool/poi/IssueI5Q1TWTest.java b/hutool-poi/src/test/java/cn/hutool/poi/IssueI5Q1TWTest.java new file mode 100644 index 000000000..edbfad091 --- /dev/null +++ b/hutool-poi/src/test/java/cn/hutool/poi/IssueI5Q1TWTest.java @@ -0,0 +1,20 @@ +package cn.hutool.poi; + +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import org.junit.Assert; +import org.junit.Test; + +public class IssueI5Q1TWTest { + + @Test + public void readTest() { + final ExcelReader reader = ExcelUtil.getReader("I5Q1TW.xlsx"); + + // 自定义时间格式1 + Assert.assertEquals("18:56", reader.readCellValue(0, 0).toString()); + + // 自定义时间格式2 + Assert.assertEquals("18:56", reader.readCellValue(1, 0).toString()); + } +} diff --git a/hutool-poi/src/test/resources/I5Q1TW.xlsx b/hutool-poi/src/test/resources/I5Q1TW.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7507bfe64f3aa5d5faf287c23ea825341ccc065f GIT binary patch literal 9230 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 O2!IU`T>z5&oc$jvi^G!u literal 0 HcmV?d00001