JAVA导入Excel文件对日期(Date)的处理

在处理Excel导入功能时,遇到日期格式问题。Excel日期默认显示为数字,不能直接使用SimpleDateFormat转换。介绍如何利用HSSFDateUtil工具类将Excel日期数字转换为Java日期格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:通常,我们在定义日期格式时会用到SimpleDateFormat 类来处理相关日期格式,但今天在写导入功能时发现Excel文档在读取日期时发现一个问题,因为Excel文档在日期方面有着固定的格式,无法SimpleDateFormat再进行格式转换。比如:在这里插入图片描述
上方时间格式为Excel固定格式:2019/11/11,进行导入读取,debug走一波即可发现在这里插入图片描述
不难发现,此时读入的日期为“43780”的一串数字,这样也无法使用SimpleDateFormatparse方法进行转换,不信的话可以自己测试一下。

所以接下来要用到的就是HSSFDateUtil这个工具类来处理时间,
Date setupTime = HSSFDateUtil.getJavaDate(Double.valueOf(sto.getSetupTime()));

sto.getSetupTime():从Excel中获取到的日期(便是上文中的“43780”这串数字)

此时便可以将从Excel中得到的数字转换为我们想要的日期格式啦。

### Java处理Excel 导入日期数据 在 Java 中,通过 Apache POI 库可以方便地读取 Excel 文件的内容。当涉及到日期类型的单元格时,Apache POI 提供了 `DateUtil` 类来帮助识别和转换日期格式的数据。 以下是关于如何在 Java 中正确处理Excel 导入日期数据的方法: #### 判断并提取日期类型单元格 对于 Excel日期单元格,其底层存储方式实际上是数值型(NUMERIC),因此需要额外判断该数值是否表示一个日期。可以通过 `DateUtil.isCellDateFormatted(Cell cell)` 方法来进行检测。如果返回 true,则说明当前单元格是以日期格式显示的,可以直接调用 `cell.getDateCellValue()` 获取对应的 `java.util.Date` 对象[^1]。 ```java import org.apache.poi.ss.usermodel.*; import java.io.File; import java.text.SimpleDateFormat; public class ReadExcel { public static void main(String[] args) throws Exception { Workbook workbook = WorkbookFactory.create(new File("test.xlsx")); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(cell.getDateCellValue()); System.out.println(formattedDate); } } } workbook.close(); } } ``` 在此代码片段中,我们首先检查单元格是否为 NUMERIC 类型,并进一步确认它是否被设置为日期格式化模式。如果是的话,就将其作为日期值取出,并利用 `SimpleDateFormat` 将其转化为指定格式字符串输出。 #### 针对不同版本 Excel 的兼容性考虑 需要注意的是,在实际项目开发过程中可能会遇到多种版本的 Excel 文档(`.xls` 和 `.xlsx`)。为了提高程序灵活性与可维护性,建议采用统一入口的方式创建 `Workbook` 实例——即使用 `org.apache.poi.ss.usermodel.WorkbookFactory.create(File file)` 工厂方法自动适配文件的具体类型[^2]。 此外,由于服务器端运行环境可能存在高并发访问情况以及潜在错误风险等问题,所以还需要特别关注线程安全性和异常捕获机制的设计实现部分。 ---
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

临渊羡鱼罢了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值