Java Gregorian日历计时器
-
11-10-2019 - |
题
我有这个Java程序,该程序计算了该人响应确认对话框的时间。但是似乎Time1和Time 2都具有相同的值。我在这里做错了什么:
import javax.swing.JOptionPane;
import java.util.*;
public class DialogTimer{
public static void main(String args[]){
int time1, time2, milli1, milli2, sec1, sec2, timeDifference;
final int MILLISECSINSECOND =1000;
JOptionPane.showConfirmDialog(null, "Is stealing ever justified? ");
GregorianCalendar before=new GregorianCalendar();
GregorianCalendar after= new GregorianCalendar();
milli1=before.get(GregorianCalendar.MILLISECOND);
milli2=after.get(GregorianCalendar.MILLISECOND);
sec1=before.get(GregorianCalendar.SECOND);
sec2=after.get(GregorianCalendar.SECOND);
time1=MILLISECSINSECOND * sec1 + milli1;
time2=MILLISECSINSECOND * sec2 + milli2;
//timeDifference=time1 - time2;
System.out.println(time1);
System.out.println(time2);
//JOptionPane.showMessageDialog(null, "It took " + (time1 - time2) + " milliseconds for you to answer");
}
}
解决方案
import javax.swing.JOptionPane;
import java.util.*;
public class DialogTimer{
public static void main(String args[]){
int time1, time2, milli1, milli2, sec1, sec2, timeDifference;
final int MILLISECSINSECOND =1000;
GregorianCalendar before=new GregorianCalendar();
milli1=before.get(GregorianCalendar.MILLISECOND);
JOptionPane.showConfirmDialog(null, "Is stealing ever justified? ");
GregorianCalendar after= new GregorianCalendar();
milli2=after.get(GregorianCalendar.MILLISECOND);
sec1=before.get(GregorianCalendar.SECOND);
sec2=after.get(GregorianCalendar.SECOND);
time1=MILLISECSINSECOND * sec1 + milli1;
time2=MILLISECSINSECOND * sec2 + milli2;
//timeDifference=time1 - time2;
System.out.println(time1);
System.out.println(time2);
//JOptionPane.showMessageDialog(null, "It took " + (time1 - time2) + " milliseconds for you to answer");
}
}
其他提示
为什么不直接使用System.CurrentTimeMillis()?例如:
long startAt = System.currentTimeMillis();
... your code ...
long elapsed = System.currentTimeMillis() - startAt;
CodegistCrest是正确的。但是无论如何,您将获得相同或几乎相同的值。现代计算机非常快,但是您从日历获得的时间分辨率和CurrentTimeMillis()是毫秒。计算机在不到1毫秒的时间内调用您的程序。
在现实生活中,您不需要这一切。你不得不说:
long before = System.currentTimeMillis();
当您显示对话框时
long after = System.currentTimeMillis();
作为用户按下按钮时称为操作的一部分。然后说
time = after - before;
不隶属于 StackOverflow