LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-16

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を使用。
  • 出力結果も再実施。
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1