Apache POI 时间单元

Chr*_*Rea 5 java excel time date apache-poi

我需要检测单元格格式是日期、时间还是日期时间。
我的代码是:

        if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
            if (DateUtil.isCellDateFormatted(cell)) {
                if (   ???   )
                    return "Time";
                else if (   ???   )
                    return "Date";
                else
                    return "Datetime";
            }
        }
Run Code Online (Sandbox Code Playgroud)

我使用 ApachePOI 3.6

Bil*_*ard 1

我在 POI 中没有看到可以轻松完成此操作的内置方法。首先,“时间”、“日期”和“日期时间”之间似乎没有明确的区别。这些值仅存储为数字,并应用某种格式来显示它。

您可以做的一件事是获取单元格 ( HSSFCellStyle) 的样式,然后编写自己的方法,该方法读取 或style.getDataFormatString()style.getDataFormat()告诉您该格式是否属于“时间”、“日期”或“日期时间”类别,具体取决于您的方式定义它们。第二种方法返回一个,int因此它可能更容易使用。

例如,下面突出显示的格式的字符串数据格式为“[$-F400]h:mm:ss\ AM/PM”,值为int166。

Excel 日期/时间格式

我假设这就是您所说的“日期时间”格式,因为它是 Excel 的内置格式之一,可显示日期和时间。

这种方法的缺点是我不希望它适用于具有自定义日期/时间格式的单元格。