java读取excel时间不对的问题

时间:2022-10-19 16:27:53

主要有两点:
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>();
}

}