Apache POI写入时间大于24

时间:2012-10-15 15:49:49

标签: java excel apache-poi

我想写一个excel文件。在这个文件中有一些列我把时间值设置为“11:21”。在本专栏的最后一行中,我想添加这些时间值并显示总数,如“123:23”。为此,我使用以下代码:

HSSFCellStyle cellStyle = wb.createCellStyle();
                    cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("h:mm"));
                    c.setCellValue(DateUtil.convertTime("49:12"));
                    c.setCellStyle(cellStyle);

但它给了我以下错误: java.lang.IllegalArgumentException:错误的时间格式'49:12'预期'HH:MM'或'HH:MM:SS' - 小时值(49)超出允许范围(0..23)

请帮帮我。

3 个答案:

答案 0 :(得分:3)

这种方法对我有用:
1.设置自定义数据格式[h]:mm
2.使用SimpleDateFormat为您的时间获取java.util.Date对象 3. Excel的纪元是1900年,因此使用日历
将日期对象中的年份设置为1900 4.扣除1天后将单元格值设置为Date对象

CreationHelper createHelper = wb.getCreationHelper();

CellStyle hhmmStyle = wb.createCellStyle();
hhmmStyle.setDataFormat(createHelper.createDataFormat().getFormat("[h]:mm"));

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");

xlsCell.setCellStyle(hhmmStyle);

Date time = sdf.parse("49:00");
Calendar cal = Calendar.getInstance();
cal.setTime(time);
cal.set(Calendar.YEAR, 1900);

xlsCell.setCellValue(DateUtil.getExcelDate(cal.getTime())-1.0);

答案 1 :(得分:1)

尝试使用SimpleDateFormat

    SimpleDateFormat _24HourFormat = new SimpleDateFormat("HH:mm");
    SimpleDateFormat _12HourFormat = new SimpleDateFormat("hh:mm");

例如

SimpleDateFormat _24HourFormat = new SimpleDateFormat("HH:mm");
Date date = _24HourFormat.parse("49:12");
cell.setCellValue(date);

答案 2 :(得分:-1)

您可以在数据的第一个位置添加撇号,以便将值设置为String,无需将值设置为Date

c.setCellValue("'49:12");