0

我正在使用 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。

任何用于以不同格式处理时间戳值的有效解决方案都将受到赞赏。

4

1 回答 1

0

好的,有一个简单的方法可以做到这一点。

从数据库中获取具有 TIMESTAMP 数据类型的列名,并与您的 Excel 工作表的标题进行比较。

如果 Excel 标题与 DB 的列名匹配,则使用单独的 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'") 并执行您的活动。

对你好吗?

于 2012-11-28T10:27:26.490 回答