生物屋さんのためのゼロからのプログラミング

―忘れないための覚書 (たま~に更新)―

System.currentTimeMillisを用いた処理時間の取得

あるタスクをクリアするのに要した時間を測定するためのソースコードを書いてみた。

ソースコードは下記。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TimeGet extends JFrame implements ActionListener {
	
	static TimeGet frame;
	long startMs;
	
	public void actionPerformed (ActionEvent e) {
		String cmd = e.getActionCommand();
		
		if (cmd.equals("start")) {
           //startボタンが押された時間の取得
			startMs = System.currentTimeMillis();
			System.out.println("SartTime = " + startMs);	
		
		} else if (cmd.equals("end")) {
           //endボタンが押された時間の取得
			long endMs = System.currentTimeMillis();        
			System.out.println("EndTime = " + endMs);

                      //startボタンが押された時間とendボタンが押された時間の差を表示
            System.out.println("interval = " + (endMs - startMs)/1000);
			System.out.println("Time = " + (endMs-startMs)/60000 + " min " + ((endMs-startMs)%60000)/1000 + " sec." );
		}
	}
	
	TimeGet () {
		setTitle("TimeGet");
		setSize(150, 180);		
		JPanel pane = new JPanel ();
		pane.setLayout(null);
		JButton startB = new JButton ("Push");
		JButton endB = new JButton ("End");
		startB.setBounds(20, 20, 80, 40);
		endB.setBounds(20, 70, 80, 40);
		startB.addActionListener (this);
		endB.addActionListener(this);
		startB.setActionCommand("start");
		endB.setActionCommand("end");
		pane.add(startB);
		pane.add(endB);
		getContentPane().add(pane);		
	}

	public static void main(String[] args) {
		frame = new TimeGet();
		frame.setVisible(true);
	}
}

このコードを実行すると、下記のようにStartボタンを押してからEndボタンを押すまでの時間を表示してくれる。

  SartTime = 1484701481739
  EndTime = 1484701685181
  interval = 203
  Time = 3 min 23 sec.


日時の取得は、java.util.Dateクラスを下記の様に用いることで、

  Date date1 = new Date();
  System.out.println("Date = " + date1);
  Date = Wed Jan 18 06:34:47 JST 2017

のように、このコードが実行された日時を取得できるが、この方法で処理時間を計算するのは面倒なため、
ここでは、“System.currentTimeMillis()”を使用した。
この“System.currentTimeMillis()”の戻り値は、ミリ秒で測定した現在時刻と協定世界時UTC 1970 年 1 月 1 日深夜零時との差である。そのため、下記のコードで

  (endMs-startMs)/60000 //分の表記
  ((endMs-startMs)%60000)/1000 //秒の表記

分秒単位で表示するようにした。