Calendarクラスで月末を取得する方法の速さ比較

  • 1
    Like
  • 2
    Comment
More than 1 year has passed since last update.

JavaでCalendarクラスを使って月末を取得する2つの方法について速さを比較してみました。

実行環境は以下の通りです。

  • DELL VOSTRO 1540
  • Windows 10 Pro 32bit
  • Intel Celelron 2.00 GHZ
  • メモリ 2.0GB
  • HDは約300GB

月末を取得する方法は以下の2つです。

  • getActualMaximumメソッドを使用
  • 翌日初日-1を設定

ソースと実行結果

上記をそれぞれ30000回実行して時間を比較しました。以下、ソースと結果です。

ソース
package test;

import java.util.Calendar;
import java.util.function.IntSupplier;

public class Test {

    // --計測用--
    private void printProcessingTime(IntSupplier f) {
        int count = 30000;
        long start, end;
        start = System.currentTimeMillis();
        for (int i = 0; i < count; i++) {
            f.getAsInt();
        }
        end = System.currentTimeMillis();
        System.out.printf("出力確認:%s, 計測 %3d: ", f.getAsInt(), end - start);
        System.out.println();
    }

    // --計測--
    public static void main(String[] args) {
        new Test().test();
    }

    private void test() {
        // test1
        System.out.println("test1");
        printProcessingTime(() -> {
            Calendar c = Calendar.getInstance();
            c.clear();
            c.set(2016, 1, 1);
            return c.getActualMaximum(Calendar.DATE);
        });

        // test2
        System.out.println("test1");
        printProcessingTime(() -> {
            Calendar c = Calendar.getInstance();
            c.clear();
            c.set(2016, 2, 1);
            c.add(Calendar.DATE, -1);
            return c.get(Calendar.DATE);
        });
    }
}

以下、実行結果です。

結果
test1
出力確認:29, 計測 286: 
test1
出力確認:29, 計測 112: 

getActualMaximumメソッドの方が遅いという結果が出ました。

修正履歴

20161009

  • 文言修正。
  • ソースを修正し、java.util.functionを使用。
  • 出力結果も再実施。