11

日付を含むテキストファイルを読んでいて、日付を表す文字列をJavaのDateオブジェクトに解析したいと思います。私が気付いたのは、動作が遅いことです。なんで?それを加速する方法はありますか?私のファイルは次のようになります:

2012-05-02 12:08:06:950, secondColumn, thirdColumn
2012-05-02 12:08:07:530, secondColumn, thirdColumn
2012-05-02 12:08:08:610, secondColumn, thirdColumn

ファイルを1行ずつ読み取り、各行から日付を取得し、次のように使用してオブジェクトStringに解析します。DateSimpleDateFormat

DataInputStream in = new DataInputStream(myFileInputStream);
BufferedReader  br = new BufferedReader(new InputStreamReader(in));
String strLine;

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while ((strLine = br.readLine()) != null)
{
    ....Do things....
    Date myDateTime = (Date)formatter.parse(myDateString);
    ...Do things....
}
4

3 に答える 3

8

日付とタイムゾーンの変換には費用がかかります。日付/時刻が互いに類似していると想定できる場合は、分が変更されるたびに日付と時間/分(またはGMTを使用する場合は日付のみ)を変換して、自分で秒を生成できます。

これはparse1分に1回呼び出されます。あなたの仮定に応じて、あなたはそれを1時間に1回または1日に1回作ることができます。

String pattern = "yyyy-MM-dd HH:mm";
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
String lastTime = "";
long lastDate = 0;
while ((strLine = br.readLine()) != null) {
    String myDateString = strLine.split(", ")[0];
    if (!myDateString.startsWith(lastTime)) {
        lastTime = myDateString.substring(0, pattern.length());
        lastDate = formatter.parse(lastTime).getTime();
    }
    Date date = new Date(lastDate + Integer.parseInt(myDateString.substring(pattern.length() + 1).replace(":", "")));
}
于 2012-08-03T15:02:03.503 に答える
4
于 2018-03-05T00:29:28.763 に答える
2

より高速になるカスタムパーサーを作成することをお勧めします。何かのようなもの:

Date parseYYYYMMDDHHMM(String strDate) {
   String yearString = strDate.substring(0, 4);
   int year = Integer.parseInt(yearString);
   ...

もう1つの方法は、事前に計算された日時(ミリ秒なし)のハッシュマップを使用してUNIXタイムスタンプを作成することです。明確な日付があまりない場合に機能します(または、日付が反転したら再計算できます)。

于 2016-06-09T11:32:42.917 に答える