java讀取excel時間不對的問題

主要有兩點:
1.時間從24小時制變成了12小時制;
2.時間無端端多了8小時;
原因:
1.沒有進行時間格式化好
2.時區不對;

/**
     * 讀取Excel文件
     * 
     * @param inputStream
     * @return
     */
    public List<Map> readExcel(InputStream inputStream) {

        Workbook workbook = null;// 工作簿對象
        Cell cell = null;// 單元格對象

        try {
            // 獲取Excel文件對象
            workbook = Workbook.getWorkbook(inputStream);

            // 獲取文件的指定工作表,默認的第一個
            Sheet sheet = workbook.getSheet(0);
            log.debug("導入文件的總行數---" + sheet.getRows());
            if (sheet == null || sheet.getRows() < 1) {
                return new ArrayList<Map>();
            }
            Map headMap = new HashMap();
            // 從第一行開始讀取,獲取表頭文字
            for (int i = 0; i < 1; i++) {
                // 創建一個數組 , 用來存儲每一列的值
                String[] strArray = new String[sheet.getColumns()];
                // 從第一列開始讀取,獲取表頭的文字
                for (int j = 1; j < strArray.length; j++) {
                    // 獲取第i行,第j列的值
                    cell = sheet.getCell(j, i);
                    strArray[j] = cell.getContents();
                    Pattern p = Pattern.compile("\\s*|\t|\r|\n");
                    Matcher m = p.matcher(strArray[j]);
                    strArray[j] = m.replaceAll("");
                    headMap.put(j, strArray[j]);
                }
            }
            // 創建一個list 用來存儲讀取的內容
            List<Map> list = new ArrayList<Map>();
            // 行數(表頭的目錄不需要,從1開始)
            for (int i = 1; i < sheet.getRows(); i++) {
                Map map = new HashMap();
                // 創建一個數組 , 用來存儲每一列的值
                String[] strArray = new String[sheet.getColumns()];
                if (sheet.getColumns() < 1) {
                    return new ArrayList<Map>();
                }
                for (int j = 1; j < strArray.length; j++) {
                    // 獲取第i行,第j列的值
                    cell = sheet.getCell(j, i);
                    // 判斷是否是時間格式
                    if (cell.getType() == CellType.DATE) {
                        DateCell dc = (DateCell) cell;
                        Date date = dc.getDate();
                        TimeZone zone = TimeZone.getTimeZone("GMT");
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        sdf.setTimeZone(zone);
                        String sDate = sdf.format(date);
                        strArray[j] = sDate;
                    }else{
                        strArray[j] = cell.getContents();
                    }
                    String headItem = String.valueOf(headMap.get(j));
                    map.put(TpcEnum.getHeadName(headItem), strArray[j]);
                }
                // 把剛獲取的列存入list
                list.add(map);
            }
            return list;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return new ArrayList<Map>();
        } catch (BiffException e) {
            e.printStackTrace();
            return new ArrayList<Map>();
        } catch (IOException e) {
            e.printStackTrace();
            return new ArrayList<Map>();
        }

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章