使用POI写日期(没有时间)

时间:2013-02-21 01:59:22

标签: excel date apache-poi

当我使用POI写出日期时,我也会在Excel中看到时间。 (显示的时间是写入单元格时机器上的时间)。 这是我用过的代码

XSSFCellStyle dateStyle = wb.createCellStyle();
CreationHelper createHelper = wb.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd-mmm-yyyy"));
Calendar cal = Calendar.getInstance();
cal.set(xx.getYear(), xx.getMonthOfYear(), xx.getDayOfMonth());
cell.setCellStyle(dateStyle);
cell.setCellValue(cal);

单元格中的日期是正确的,即2013年12月12日,但对于该单元格,在公式栏中,时间也会显示。因此,细胞显示2013年12月12日,公式栏显示2013年12月12日上午7:14:39。我检查了excel中单元格的格式,它显示为自定义dd-mm-yyyy,这是我所期望的。 太明确了 - 细胞本身显示12-12-2012但是在公式栏中的那个细胞时间也显示出来。 我还用日期替换了日历 - 同样的问题。

Addl info:在excel中我将col的格式更改为'general' - 对于POI添加的单元格,我看到值为xxx.xxx,如41319.3769490278,而当我只输入日期时手的值看起来像41319.它看起来像小数点后面的数字导致时间显示。当我使用POI将其写出来时,不确定如何避免这种情况

2 个答案:

答案 0 :(得分:6)

好的解决了。把它放在那些遇到同样问题的人身上。 我查看了POI源代码,并意识到从日历中计算出一个double,并将单元格值设置为该值。从评论中可以清楚地看出小数点后面的数字代表时间。所以我在我的代码中所做的就是截断那个双倍。更改的行在下面的代码段中进行了注释。

XSSFCellStyle dateStyle = wb.createCellStyle();
CreationHelper createHelper = wb.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd-mmm-yyyy"));
Calendar cal = Calendar.getInstance();
cal.set(xx.getYear(), xx.getMonthOfYear(), xx.getDayOfMonth());
cell.setCellStyle(dateStyle);
double d = DateUtil.getExcelDate(cal, false); //get double value f
cell.setCellValue((int)d);  //get int value of the double

答案 1 :(得分:2)

您没有完全清除日历中的实例,这就是时间来临的原因

您还需要将时间值设置为零,因此您的代码应该看起来像:

Calendar cal = Calendar.getInstance();
cal.set(xx.getYear(), xx.getMonthOfYear(), xx.getDayOfMonth());
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);