今天发现一问题,java读取excel的时候 ,再处理时间格式数据的时候不是很一致。比如有的会解析成2012/01/02 12:00:00 (excel单元格格式为:yyyy-mm-dd HH:mm:ss 单元格内容为:2012-01-02 00:00:00),

而有些会解析为:11/13/12 0:00(excel单元格格式为:yyyy-m-d H:mm 单元格内容为:2012-11-13 0:00:00)。为了使所有的时间数据都能解析成统一的格式。对原来的java代码进行的处理。对日期格式的数据进行特别的处理。

再解析数据的时候 先判断excel的数据是否CellType为DATE


public static String[][] parseXls(String filePath, int sheetNum) throws IOException, BiffException {
    //通过Workbook的静态方法getWorkbook选取Excel文件
    Workbook workbook = Workbook.getWorkbook(new File(filePath));
    //通过Workbook的getSheet方法选择第一个工作簿(从0开始)
    Sheet sheet = workbook.getSheet(sheetNum);
    int rows = sheet.getRows();
    int cols = sheet.getColumns();
    Cell cells[][] = new Cell[cols][rows];

    String[][] finalContents = new String[rows][cols];
    for (int i = 0; i < cols; i++) {
        for (int j = 0; j < rows; j++) {
             cells[i][j] = sheet.getCell(i, j);
             if (cells[i][j].getType() == CellType.DATE) {//对日期数据进行特殊处理,如果不处理的话 默认24h制会变成12小时制
                 finalContents[j][i] = TotemConfigParseJFrame.formatTime(sheet.getCell(i, j));
             } else {
                 finalContents[j][i] = sheet.getCell(i, j).getContents();
             }
       }
    }
}

public static String formatTime(Cell formatCell) {
    java.util.Date date = null;
    DateCell dateCell = (DateCell) formatCell;
    date = dateCell.getDate();
    long time = (date.getTime() / 1000) - 60 * 60 * 8;
    date.setTime(time * 1000);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return formatter.format(date);

}

//或者 formatTime 的实现方式也可以修改为 @see http://www.andykhan.com/jexcelapi/tutorial.html#dates

public static String formatTime(Cell formatCell) {
    java.util.Date date = null;
    DateCell dateCell = (DateCell) formatCell;
    date = dateCell.getDate();
    TimeZone gmtZone = TimeZone.getTimeZone("GMT");
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    formatter.setTimeZone(gmtZone);
    System.out.println(formatter.format(date));
    return formatter.format(date);

}