【问题标题】:JExcelAPI - writing date to Excel sheet ignores day, month and yearJExcelAPI - 将日期写入 Excel 工作表忽略日、月和年
【发布时间】:2009-06-08 17:55:59
【问题描述】:

我尝试使用 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 是 Mon Jun 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,日期部分被丢弃。虽然参考文献提到了时区问题,但它没有提到丢弃日期。我做错了什么?

【问题讨论】:

    标签: java excel datetime jexcelapi


    【解决方案1】:

    好的。我想通了。创建日期格式

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

    并将其传递给 DateTime 构造函数

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

    修复它。似乎默认情况下只占用时间部分。对不起我的愚蠢。

    【讨论】:

    • 不要添加新答案。编辑您的原件。
    • 或接受此答案以明确您找到问题所在
    • 将我的问题解决为 :-) 唯一不同的是我创建了 DateTime,如“new DateTime(0, 0, date)”,因此没有格式。之后我在 DateTime 对象上使用 setCellFormat(..) 函数添加了格式。但这不起作用,通过构造函数传入它。感谢这个非常有用的提示! :-)
    【解决方案2】:

    POI 不是我推荐的答案。 JExcel 可以管理它。我没有看到您在该单元格上设置类型的位置。看看DateFormats

    如果您使用 Excel,问题也是一样的。如果您在未设置该格式的单元格中输入日期,则会出现意外行为。

    【讨论】:

    • 我创建了一个 jxl.write.DateTime 类型的 WritableCell。我希望它设置正确的类型(因为 jxl.write.Number 将类型设置为数字)。但似乎还需要一个 DateFormat 。我以为它只控制显示,但它也会影响 java.util.Date 的哪一部分被写入。
    猜你喜欢
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多