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 //秒の表記
分秒単位で表示するようにした。