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