我正在使用 Apache POI 来读取 excel 数据,并在 Java 中处理它们。要处理的数据位于 Excel 工作表中,该工作表由 Toad 填充。后端是 Oracle,因此数据类型还包括日期和时间戳列,这些列以这种格式填充到 Excel 中 对于日期:07/01/2012 00:00:00 对于时间戳:01/07/2012 00:00:00.000。
excel 文件名是静态的,但它包含的数据会有所不同,因为它以不同的时间间隔填充了来自不同表/视图的数据。
我能够使用处理 DATE 列
//Set the date format for the data fields
HSSFCellStyle dateStyle = workBook.createCellStyle();
short dateFormat = workBook.createDataFormat().getFormat("yyyy-mm-dd hh:mm:ss");
dateStyle.setDataFormat(dateFormat);
DataFormatter fmt = new DataFormatter();
if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
//Check if data in the cell is a date
if (HSSFDateUtil.isCellDateFormatted(hssfCell))
hssfCell.setCellStyle(dateStyle);
问题:
但是当涉及到 TIMESTAMP 列时,HSSFCell.CELL_TYPE_NUMERIC 不适用于这些单元格,因此 HSSFDateUtil.isCellDateFormatted 不适用于它们。所以我无法为 TIMESTAMP 列指定格式。我通过查询(使用Java)将excel中的数据与Oracle表中的实际数据进行比较,由于这个格式问题,它们不匹配。
我是 Java 和 POI 的新手,所以可能会在这里错过一些愚蠢的东西。关于如何解决这个问题的任何意见?
更新
在浏览网页寻找替代解决方案后,我暂时采取了一种静态方法,我希望时间戳数据具有特定格式
String timestampIn = "dd/MM/yyyy HH:mm:ss.SSS";
String timestampOut = "yyyy-MM-dd HH:mm:ss.SSS";
try
{
Date date = (new SimpleDateFormat(timestampIn)).parse(fmt.formatCellValue(hssfCell).toString().trim());
//Add data in the cell to the ArrayList
cellTempList.add((new SimpleDateFormat(timestampOut)).format(date));
}
catch (ParseException pe) {
//Add data in the cell to the ArrayList
cellTempList.add(fmt.formatCellValue(hssfCell));
}
这仅适用于 Excel 中的时间戳格式是这种格式 - dd/MM/yyyy HH:mm:ss.SSS。
任何用于以不同格式处理时间戳值的有效解决方案都将受到赞赏。