时间单元问题 - 增加24分钟

时间:2014-09-18 13:25:09

标签: java excel apache-poi xls

我使用apache poi 3.7和java 7。

我在.xls格式的excel中输出时间单元格有问题。小时和分钟作为一个值存储在数据库中,为double。 如果我在生成的xls文件中传递值1.0将显示为1小时24分钟。不幸的是,这个问题不会在本地我无法访问数据,我无法在本地环境中重复此问题。

下面是我初始化工作簿和有问题单元格格式的代码:

Workbook workbook = WorkbookFactory.create(template);
DateFormat df = workbook.createDataFormat();
CellStyle style = workbook.createCellStyle();
style.setDataFormat(df.getFormat("h:mm"));

下面是用于创建单元格的函数。函数从数据库获取参数值:

private void createTimeCell(Row r, int pos, double value) {
    int hours = (int) value;
    int minutes = (int) Math.round((value - hours) * 60);
    Date date = new Date(0, 0, 1);
    date.setHours(hours);
    date.setMinutes(minutes);
    Cell c = r.createCell(pos);     
    c.setCellValue(date);
    c.setCellStyle(style);
}

1 个答案:

答案 0 :(得分:0)

Excel中的日期和时间存储为浮点数,整数部分是自1900/1904以来的天数,余数作为一天的一小部分时间。

因此,您可以通过以下方式使代码更简单:

Workbook workbook = WorkbookFactory.create(template);
DateFormat df = workbook.createDataFormat();
CellStyle timeStyle = workbook.createCellStyle();
timeStyle.setDataFormat(df.getFormat("h:mm"));

private void createTimeCell(Row r, int pos, double hoursAndMinutes) {
    Cell c = r.getCell(pos, Row.CREATE_NUL_AS_BLANK);
    c.setCellValue(hoursAndMinutes / 24);
    c.setCellStyle(timeStyle);
}