3

2011 年 5 月 31 日 5:49:44 PM という値が入力されたタイムスタンプ列がある Excel ファイルがあります POI イベント モデルを使用してこの Excel ファイルを読み込んでいます。(実装はhttp://poi.apache.org/spreadsheet/how-to.html#sxssf - "XSSF and SAX (Event API)"で説明されているものと同じです) 上記のタイムスタンプ値は 40694.74287037037 として読み取られ、私はしません理由を知っている。この値を日時形式に戻すことができません。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

これはまったく予想通りです。Microsoft Excel ファイル形式は、ファイルに設定されたフラグ (1904 日付ウィンドウ フラグ) に応じて、1900/01/01 または 1904/01/01 以降のすべての日付時刻を分数の日付として格納します。したがって、生の値を読み取ると、1900 年 1 月 1 日の午後 6 時は として返され1.75ます。

UserModel コードを使用している場合は、それを Date に戻すために使用できるヘルパーがたくさんあります。イベント モデルでは、(フォーマットをチェックして) 自分でそれを見つけてから、自分で変換を呼び出す必要があります。

必要なクラスはDateUtil、特にDateUtil.getJavaDate(double)などのメソッドです

Apache POI は、このようなことを行う例を多数提供しています。ガイドとしてXLS2CSVmraなどを確認することをお勧めします。

また、1 日を気にせずに時間だけを求める場合は、整数以外の剰余をとります。現在の時間 (切り捨て) については、次のようにします。

double date = cell.getNumericCellValue(); // 1.76
double time = date - ((int)date);
int hours = time * 24; // 18
于 2013-09-17T09:55:27.967 に答える
0

@Gagravarr によって提案された DateUtil.getJavaDate(double) ソリューションを使用しました。誰かが日付を文字列形式で保存し、POI が同じものを読み取る場合に備えて、追加のチェックを行いました。それは完璧に機能しました。皆様、貴重なご提案をありがとうございました。

于 2013-09-19T04:54:52.650 に答える