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();
        }
    }
}

 

扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论