我有一个excel中的单元格,其时间戳值为“12:30:00”,当我从excel获取单元格的值到Java中的变量时,它将转换为十进制值(0.520833333333333)。如何保留相同的时间戳值或相应地将小数转换为时间戳值。
答案 0 :(得分:2)
日期和我假设时间值也以数字形式存储在Excel中。在使用 Apache POI 时,需要特别处理它们。
您可以尝试以下方法来处理此问题
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm:ss");
if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
// Dates count as numeric and must be handled separately
if (DateUtil.isCellDateFormatted(cell)) {
timeFormat.format(cell.getDateCellValue());
}
}
这当然只是一个例子,它在一个简单的测试用例中起作用。我将 12:30:00 输入到单元格中,它被识别为日期,我获取了Date
对象并从中提取了时间。
我过去检查的DateUtil
是 Apache POI 的一部分。它还有一些其他功能可能对您有所帮助。
但是你应该知道,这适用于一个非常具体的案例。即将时间存储为日期。 如果在源文件中更改了单元格格式,它也可以存储为简单文本。
根据我的经验,仅处理预期的案例是不够的。您通常需要在switch语句中处理不同的单元格类型(至少是Numeric和String,也可能是Formula),只是为了保存。
答案 1 :(得分:1)
您要检索0.520833333333333
的小数值实际上是12.5/24
所以它只是一天的一小部分。
答案 2 :(得分:0)
MS Excel将日期存储为浮点值。整数部分表示天数,小数部分表示小时,分钟和秒。