使用兴趣点写date(没有时间)

当我使用POI写出date时,我也会在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); 

在单元格中的date是正确的,即2013年12月12日,但对于该单元格,在公式栏中,时间也显示。 所以细胞显示12-Dec-2013和公式栏显示12-Dec-2013 7:14:39 AM。 我在Excel中检查单元格的格式,它显示为自定义dd-mm-yyyy,这是我所期望的。 也很清楚 – 细胞本身显示12-12-2012,但在配方栏的细胞时间也显示。 我也用datereplace日历 – 同样的问题。

Addl信息:在Excel中,我改变了col的格式为'general' – 对于由POIjoin的单元格,我看到的值是xxx.xxx,如41319.3769490278,而当我只是手动inputdate时,值看起来像41319.它看起来像小数点后的数字是导致时间显示。 不知道如何避免这一点,当我用POI写出来

好的解决了。 把这个放在那里面,遇到同样问题的其他人。 我查看了POI源代码,并意识到从日历中计算出double,并将单元格值设置为该值。 从注释中可以明显看出,小数点后面的数字代表时间。 所以我在我的代码中所做的就是截断这个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 

您没有完全清除您获取date的日历实例,这就是时间到来的原因

您还需要将时间值设置为零,所以您的代码将看起来像这样:

 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);