我尝试使用JExcelAPI(v.2.6.3)在Java应用程序中生成一些Excel工作表,并且无法正确生成日期单元格。例如,代码:
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日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,日期部分将被丢弃。虽然参考文献提到了时区问题,但它没有提到丢弃日期。我做错了什么?
答案 0 :(得分:6)
行。我想通了。创建DateFormat
DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss");
WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat);
并将其传递给DateTime构造函数
DateTime dateTime = new DateTime(0, 0, date, dateFormat);
修复它。似乎默认只采用时间部分。对不起我的傻瓜。
答案 1 :(得分:0)
如果您使用的是Excel,问题也是一样的。如果您在没有设置该格式的单元格中输入日期,则会出现意外行为。