jxl导入时间单元格特殊处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengchang_1981/article/details/8268358

      采用jxl解析含有时间单元格的xls时,发现入库的小时数总是同excel中的小时不相符,其它年月日,分秒都没问题。

      通过搜索网上的一些总结和自己的试验,归纳如下:

  1.       首先需要把xls中的时间单元格设置好单元格格式,选中需要设置单元格格式的单元格,点击右键菜单选择“设置单元格格式...”,如下图所示
           如图,选中日期并选择‘2001-3-7 0:00’,如果需要设置带有秒的格式,可以选择分类中“自定义”选项,自行添加格式。
          2,jxl解析代码:
               
public static List parseExcel(int colNum, int begin, int blank,
			InputStream is) {
		List res = new ArrayList();
		Workbook rwb = null;
		try {
			rwb = Workbook.getWorkbook(is);
			int sheetNum = rwb.getNumberOfSheets();

			for (int s = 0; s < sheetNum; s++) {
				// 获取一张Sheet表
				Sheet st = rwb.getSheet(s);

				if (st.getColumns() != colNum) {
					throw new Exception("列数不正确!");
				}

				int i; // 行号
				int j;

				// 精确到分钟即可
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
				// 这句很重要,必须采用标准的GMT时区,不然解析的时间会不正确
				sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
				// 针对导入的包含日期的情况进行重构
				for (i = begin; i <= st.getRows() - blank; i++) {
					List rowList = new ArrayList();

					for (j = 0; j < colNum; j++) {
						Cell cji = st.getCell(j, i);

						// 判断如果是时间类型的单元格则进行时间转化特殊处理,相应的excel必须为日期类型的单元格
						if (cji.getType() == CellType.DATE) {
							DateCell dc = (DateCell) cji;
							Date date = dc.getDate();

							String sDate = sdf.format(date);
							rowList.add(sDate);
						} else {

							String content = cji.getContents();
							rowList.add(content);
						}
					}

					res.add(rowList);
				}
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

			if (rwb != null) {
				rwb.close();
			}
			try {
				is.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
		return res;
	}
       代码解释,对于时间单元格处理,必须加上
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
       采用标准的GMT时区来解析,不然小时不会以24小时制正常解析。得到的小时就完全不对。
       参考文献:

猜你喜欢

转载自blog.csdn.net/pengchang_1981/article/details/8268358