4

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:002009
私の誕生日はWedOct 17 08:15:45 GMT + 01:00 2007

また、Excelファイルでは、セルは
1900-01-00 10:14:461900-01-0007:15:
46です。

Excelの時間部分はUTCに修正され、日付部分は破棄されます。参照ではタイムゾーンの問題について言及していますが、日付の破棄については何も述べていません。私は何が間違っているのですか?

4

2 に答える 2

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

それを修正します。デフォルトでは時間の部分だけが取られるようです。私の愚かさでごめんなさい。

于 2009-06-08T09:53:43.433 に答える
0

POIは私がお勧めする答えではありません。JExcelはそれを管理できます。そのセルのどこにタイプを設定したかわかりません。DateFormatsをご覧ください。

Excelを使用している場合も、問題は同じです。そのフォーマットが設定されていないセルに日付を入力すると、予期しない動作が発生します。

于 2009-06-08T09:55:59.687 に答える