poi读取excel把日期自动转换成数字了

在Apache POI中,当你从Excel文件中读取日期时,POI会自动将其转换为数字。这是因为Excel将日期存储为序列号(从1900年1月1日开始的天数)。
要将这个数字转换回日期,你可以使用以下方法:
import org.apache.poi.ss.usermodel.*;
import java.util.*;
public Date convertExcelDateToJavaDate(double date) {
Date javaDate = DateUtil.getJavaDate((int) date);
return javaDate;
}
使用方法:
// 假设你已经有了一个double类型的数字,比如从Excel文件中读取的日期数字
double dateFromExcel = 44514; // 示例数字,实际情况需要从Excel文件中获取
Date javaDate = convertExcelDateToJavaDate(dateFromExcel);
// 输出转换后的日期
System.out.println(javaDate);
这段代码将会把从Excel读取的数字转换为Java的Date对象。如果你需要其他的日期格式,可以进一步对Date对象进行格式化。
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author Daniel
* @Description 解决poi读取excel日期为数字的问题
**/
public class ConvertExcelDate {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("date.xlsx");
Workbook workbook = WorkbookFactory.create(fis);
// 获取第一张表
Sheet sheet = workbook.getSheetAt(0);
// 获取行数
int rows = sheet.getPhysicalNumberOfRows();
// 获取第一行的表头
Row firstRow = sheet.getRow(0);
// 获取列数
JSONArray jsonArray = new JSONArray();
// i=1,忽略表头
for (int i = 1; i < rows; i++) {
Row row = sheet.getRow(i);
if (row != null) {
JSONObject rowObj = new JSONObject();
//循环列
for (int j = 0; j < firstRow.getPhysicalNumberOfCells(); j++) {
Cell cellData = row.getCell(j);
if (cellData != null) {
// 日期会被当作数字
if (cellData.getCellType() == Cell.CELL_TYPE_NUMERIC) {
// 设置要求的日期格式
SimpleDateFormat sdf = new SimpleDateFormat("MM/d/yyyy");
// 拿到数字格式的日期
double value = cellData.getNumericCellValue();
// 这里的关键就是使用DateUtil类将数字转化为日期
Date date = DateUtil.getJavaDate(value);
rowObj.put(firstRow.getCell(j).getStringCellValue(), sdf.format(date));
} else {
row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
rowObj.put(firstRow.getCell(j).getStringCellValue(), cellData.getStringCellValue());
}
} else {
rowObj.put(firstRow.getCell(j).getStringCellValue(), "");
}
}
jsonArray.add(rowObj);
}
}
System.out.println(jsonArray);
} catch (Exception e) {
e.printStackTrace();
}
}
}
扫码领红包
微信赞赏
支付宝扫码领红包
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。侵权投诉:375170667@qq.com








