JExcelAPI – 将date写入Excel工作表忽略日,月和年

我尝试使用JExcelAPI(v.2.6.3)在Java应用程序中生成一些Excel工作表,并且无法正确生成date单元格。 例如,对于代码:

WritableWorkbook workbook = null; workbook = Workbook.createWorkbook(new File("C:\\tmp\\tests.xls")); try { Date date = new Date(); final WritableSheet sheet = workbook.createSheet("Sheet", 0); DateTime dateTime = new DateTime(0, 0, date); sheet.addCell(dateTime); System.out.println("Date1 is " + date); final Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2007); cal.set(Calendar.MONTH, Calendar.OCTOBER); cal.set(Calendar.DAY_OF_MONTH, 17); cal.set(Calendar.HOUR_OF_DAY, 8); cal.set(Calendar.MINUTE, 15); date = cal.getTime(); dateTime = new DateTime(0, 1, date); sheet.addCell(dateTime); System.out.println("My birthday is on " + date); } finally { workbook.write(); workbook.close(); } 

输出(在控制台上)是:
Date1是星期一六月08 11:14:45 GMT + 01:00 2009
我的生日是在星期三10月17日08:15:45 GMT + 01:00 2007

并在Excel文件中的单元格
1900-01-00 10:14:46
1900-01-00 07:15:46

Excel中的时间部分已更正为UTC,并且date部分被丢弃。 虽然参考文献提到了时区问题,但没有提到丢弃date。 我究竟做错了什么?

好。 我想到了。 创buildDateFormat

 DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss"); WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat); 

并将其传递给DateTime构造函数

 DateTime dateTime = new DateTime(0, 0, date, dateFormat); 

修复它。 似乎默认只有时间部分被采取。 对不起,我的哑巴。

POI不是我推荐的答案。 JExcel可以pipe理它。 我没有看到你在那个单元格上设置的types。 看看DateFormats 。

如果您使用Excel,问题是相同的。 如果您将dateinput到未设置该格式的单元格中,则会出现意外的行为。