我正在尝试获取java程序算法的执行时间。 我已经查看了类似的问题并尝试了几种方法来做到这一点,但是当我打印时间流逝时,我总是得到0。
Instant start = Instant.now();
//Method I want to get the exec time
Instant end = Instant.now();
System.out.println("\nTime lapse: "+Duration.between(start, end));
打印:
Time lapse: PT0S
以及:
Date d = new Date();
long t1, t2;
t1 = d.getTime();
//Method I want to get the exec time
t2 = d.getTime();
System.out.println("\nTime lapse: "+(t2-t1));
输出:
Time lapse: 0
同时,用完全相同的方法得到C的执行时间,给出了一个公平的结果:
#include <time.h>
clock_t start, end;
double time;
start = clock();
//Method I want to get the exec time
end = clock();
time = (double) (end-start) / CLOCKS_PER_SEC;
printf("\nTime lapse: %f\n", time);
输出:
Time lapse: 0.000004
为什么我不能用Java做到这一点?
修改
我尝试按照建议使用getTimeInMillis():
Calendar cal = Calendar.getInstance();
double start = cal.getTimeInMillis();
//Method I want to get the exec time
double end = cal.getTimeInMillis();
System.out.println("\nTime lapse: "+(end - start));
输出:
Time lapse: 0.0
最终编辑:好的,程序确实在不到一毫秒的时间内运行,这就是为什么我不断得到0的原因,我解决了@Ayo K的建议,我使用了 System.nanoTime()最终得到一个结果。
答案 0 :(得分:1)
要实现这一点,你必须以毫秒为单位获得时间,然后才能获得差异。
您可以使用System.currentTimeMillis()
。然后在最后得到差异。
示例强>
long start = System.currentTimeMillis();
System.out.println("start: "+start);
long stop = System.currentTimeMillis();
System.out.println("stop: "+stop);
///convert to seconds
System.out.println((stop-start)/1000f);
结果:
0.057
修改强>
如果代码在不到一毫秒的时间内运行,您可以使用System.nanoTime()
使用Nano秒。
出于模拟目的,您可以调用Thread.sleep(n)
来创建延迟,其中n
是您打算延迟的时间(以毫秒为单位)。
答案 1 :(得分:1)
Instant
的示例:
Instant s = Instant.now();
for (int i = 0; i < 100000; i++) {
System.out.println(i);
}
Instant s1 = Instant.now();
System.out.println(s1.getNano() - s.getNano());
System.out.println(Duration.between(s, s1));
打印时间:
347000000
PT0.347S
和Date
:
Date d = new Date();
for (int i = 0; i < 100000; i++) {
System.out.println(i);
}
Date d1 = new Date();
System.out.println(d1.getTime() - d.getTime());
打印:
389
现在你只需要计算你想要的类型(秒,毫秒或其他)。如果名称不是不言自明的话,文档会告诉你从方法中得到什么
答案 2 :(得分:0)
在使用Date
的示例中,您需要重新创建Date
对象(构造函数集的时间为当前时间):
int t1 = (new Date()).getTime();
//method you want to check
int t2 = (new Date()).getTime();
或者只使用System.getCurrentTimeMillis()
一次,然后once after