JExcelAPI - 将日期写入Excel工作表会忽略日,月和年

Tad*_*pec 4 java excel datetime jexcelapi

我尝试使用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();
    }
Run Code Online (Sandbox Code Playgroud)

输出(在控制台上)是:
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,并丢弃日期部分.虽然参考文献提到了时区问题,但它没有提到丢弃日期.我究竟做错了什么?

Tad*_*pec 6

好.我想通了.创建DateFormat

DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss");
WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat); 
Run Code Online (Sandbox Code Playgroud)

并将其传递给DateTime构造函数

DateTime dateTime = new DateTime(0, 0, date, dateFormat);
Run Code Online (Sandbox Code Playgroud)

解决它.似乎默认只采用时间部分.对不起我的傻瓜.