Java 中的 System.nanoTime() 与 System.currentTimeMillis()


Java 中的时间操作是什么?

Java 环境提供了两种时间操作。对于与时间相关的操作,用户可以使用这些操作。

  • System.nanoTime()

  • System.currentTimeMillis()

System.nanoTime() 主要被称为昂贵的调用,用于获取更精确的时间值。而 System.currentTimeMillis() 最可靠的已过去时间,有助于根据操作系统获取时间值。第一个函数以纳秒为单位返回时间值(有时可能会返回负值),而第二个函数以毫秒为单位返回时间值。因此很明显,System.nanoTime()更胜一筹,并且由于其准确性而更受欢迎。

什么是 System.nanoTime() 和 System.currentTimeMillis()

  • Java 环境中的System.nanoTime() 方法有助于查找两个指针之间的差异。

  • 简单来说,它有助于在进程开始之前获取一次时间读数,并在执行方法之后获取另一次时间读数。

  • 不建议每次都对代码进行性能分析,因为时间可能会根据系统的操作系统而有所不同。因此,我们可能会遇到一些不准确性。

  • System.currentTimeMillis()是一个线程安全的方法,不会返回模棱两可的结果。

  • 此函数将日期、时间和年份作为时间返回。

  • 在参考固定的情况下,我们可以获得准确的输出。但是,当用户对系统时间进行一些更改时,它将在那一刻给出错误的结果。

System.nanoTime() 和 System.currentTimeMillis() 的比较

这是一个关于这两个特定 Java 时间操作的一般示例 -

package javalangtimeslot;
import java.lang.*;
public class javatimeslot {

   public static void main(String[] args) { 
      System.out.print("Time in nanoseconds we can see here = ");
      System.out.println(System.nanoTime());
      System.out.print("Time in milliseconds we can see here = "); 
      System.out.println(System.currentTimeMillis());
   }
}  

输出

Time in nanoseconds we can see here = 4083437933186033
Time in milliseconds we can see here = 1680778649732

使用 System.currentTimeMillis() 方法的 Java 程序

System.currentTimeMillis() 方法以毫秒为单位返回当前时间。此方法告诉我们代码的一部分执行需要多长时间。

System.currentTimeMillis() 的语法

System.currentTimeMillis();
--> java.language Package
--> Declare System Class
--> currentTimeMillis() Method 

在 Java 中实现 System.currentTimeMillis() 的步骤

  • 加载库。

  • 使用TimeMillis() 方法声明 main() 方法。

  • 显示毫秒、分钟、小时和天数。

  • 打印输出。

示例 1

此示例演示如何获取当前时间(以毫秒为单位)并将其转换为秒、分钟、小时、天和年 -

import java.io.*;
public class timefuncjava {
	public static void main(String[] args){
		System.out.println("Milliseconds Are Here : " + System.currentTimeMillis());
		System.out.println("Seconds Are Here: " + (System.currentTimeMillis())/ 2000);
		System.out.println("Minutes Are Here: " + (System.currentTimeMillis())/ 2000 / 120);	
		System.out.println("Hours Are Here: " + (System.currentTimeMillis())/ 2000 / 120 / 120);
		System.out.println("Days Are: " + (System.currentTimeMillis())/ 2000 / 120 / 120 / 48);	
		System.out.println("Years Total: " + (System.currentTimeMillis()) / 2000 / 120 / 120 / 48 / 365);
        System.out.println("Milliseconds Are Here : " + System.currentTimeMillis());
		System.out.println("Seconds Are Here: " + (System.currentTimeMillis())/ 2000);
		System.out.println("Minutes Are Here: " + (System.currentTimeMillis())/ 2000 / 120);	
		System.out.println("Hours Are Here: " + (System.currentTimeMillis())/ 2000 / 120 / 120);
		System.out.println("Days Are: " + (System.currentTimeMillis())/ 2000 / 120 / 120 / 48);	
		System.out.println("Years Total: " + (System.currentTimeMillis()) / 2000 / 120 / 120 / 48 / 365);

	}
}

输出

Milliseconds Are Here : 1680778875055
Seconds Are Here: 840389437
Minutes Are Here: 7003245
Hours Are Here: 58360
Days Are: 1215
Years Total: 3
Milliseconds Are Here : 1680778875062
Seconds Are Here: 840389437
Minutes Are Here: 7003245
Hours Are Here: 58360
Days Are: 1215
Years Total: 3

在此构建代码中,我们使用了 TimeMillis 来获取毫秒、秒、分钟、小时、天和年。

示例 2

此示例演示如何使用System.currentTimeMillis()测量运行循环所花费的时间 -

public class timeprogjava{
   public static void main(String args[]){
      long starting, ending;
      System.out.println("Timing a loop from 0 to 100,000,000,000");
      starting= System.currentTimeMillis(); 
      for(long k=0;k<100000000000L;k++);
      ending=System.currentTimeMillis(); 
      System.out.println("Elapsed time Is: "+(ending-starting));
   }
}

输出

Timing a loop from 0 to 100,000,000,000

使用 System.nanoTime() 方法的 Java 程序

System.nanoTime() 方法是 Java 环境中的一个高精度时间池,以纳秒为单位。此方法始终返回当前值。

System.nanoTime() 的语法

public static long nanoTime() 
long process startTime = System.nanoTime(); 
long process estimatedTime = System.nanoTime() - startTime;

在 Java 中实现 System.nano.Time() 的步骤

  • 加载库。

  • 使用System.nanoTime()声明main() 方法

  • 显示 2 的乘法表。

  • 循环将生成 2 的倍数(2x 倍数)。

  • 打印给定输入的输出。

示例 1

使用 nano Time() -difference,我们可以计算空循环消耗的时间,以便在下一次 1000 次循环中运行。我们将获得循环之前和之后的输出时间 -

public class javacodetime {
   public static void main(String args[]) {
      long nanoTime2 = System.nanoTime();
      for(int k=0; k < 10000; k++) {
             
      }
      long nanoTime5 = System.nanoTime();    
      long runTimeInNanoSeconds = nanoTime5 - nanoTime2;    

      System.out.println("Time taken to execute the process by for loop : " + runTimeInNanoSeconds + " nano seconds");   
   }  
}

输出

Time taken to execute the process by for loop : 132509 nano seconds

示例 2

此示例将帮助我们使用System.nanoTime() 方法以纳秒为单位获取当前时间 -

public class javatimecode {
   public static void main(String args[]) {
      long nanoTime = System.nanoTime();       
      System.out.println("Current time as in Nano Seconds : "+nanoTime);
   
   }  

}

输出

Current time as in Nano Seconds : 4084089973012410

结论

总之,当问题过于繁重时,需要使用System.nano Time() 方法。对于像高清游戏这样的快速性能,纳秒时间操作是最佳选择。但为了获得准确的输出,我们可以使用System.currentTimeMillis()

在本文中,我们学习了如何使用两种时间方法获取时间。我们还使用逻辑构建了一些 Java 代码。

更新于: 2024年8月7日

1K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告