0.先结论:
nanoTime只是用来计算程序运行时间的,它不用来计算实际的时间,它的单位是毫微秒;currentTimeMillis可以用来计算运行时间,但不适合用来计算程序运行时间。
1.先用currentTimeMillis计算时间
package BasicProgramming;
public class ShowCurrentTime {
public static void main(String[]args){
long totalMilliSeconds = System.currentTimeMillis();//获取1990年1月1日0:00到现在的毫秒数
long totalSeconds = totalMilliSeconds/1000;//转换成秒
int currentSeconds = 0;//当前秒钟数
int currentMinutes = 0;//当前分钟数
int currentHours = 0;//当前小时数
//总秒数对60取余就是当前秒数,总分钟对60取余就是当前分钟,总小时数对60取余就是当前小时数;
currentSeconds = (int)(totalSeconds%60);
currentMinutes = (int)(totalSeconds/60%60);
currentHours = (int)(totalSeconds/60/60%24);
System.out.println("当前时间为"+":"+currentHours+":"+currentMinutes+":"+currentSeconds);
}
}
2.再用nanoTime计算程序运行时间
package BasicProgramming;
public class ShowCurrentTime {
public static void main(String[]args){
long startTime = System.nanoTime();
int k = 0;
for(int i=0;i<10;i++){
k = i+1;
}
long endTime = System.nanoTime();
System.out.println("循环的运行时间是:"+(endTime-startTime)+"毫微秒");
}
}
运行结果为:<循环的运行时间是:1399毫微秒>
3.再用currentTimeMillis计算程序运行时间
package BasicProgramming;
public class ShowCurrentTime2 {
public static void main(String[]args){
long startTime = System.currentTimeMillis();
int k = 0;
for(int i=0;i<10;i++){
k = i+1;
}
long endTime = System.currentTimeMillis();
System.out.println("循环的运行时间是:"+(endTime-startTime)+"毫秒");
}
}
运行结果为:<循环的运行时间是:0毫秒>
感受不到程序运行时间。
4.nanoTime输出的究竟是什么?
看一下源码解释:
Returns the current value of the running Java Virtual Machine’s high-resolution time source, in nanoseconds.
我谷歌翻译了一下:返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。
这里的high-resolution翻译的显然有点问题,于是我又查了一下resolution,找到了一个比较好的解释:the smallest interval measurable by a scientific (especially optical) instrument; the resolving power.最小间隔。也就是说nanoTime()方法以纳秒形式返回了一个JVM的最高精度的时间源。
**具体什么细节暂时还不知道!蹲一波大佬回答!