Current Time in Milliseconds and Nanoseconds

This section provides a tutorial example on how to obtain the current time in milliseconds and nanoseconds using currentTimeMillis() and nanoTime() methods.

If you want to measure how long some code takes to execute, you can use System.currentTimeMillis() and System.nanoTime() methods. They returns the current time in milliseconds and in nanoseconds.

Here is tutorial example program to check the performance of the Math.sqrt() method:

```/* SystemCurrentTime.java
*/
class SystemCurrentTime {
public static void main(String[] a) {
java.io.PrintStream out = System.out;
out.println("Performance for 1000 operationonds:");
out.println("   in milliseconds: "+milliseconds(1000));
out.println("   in nanoseconds: "+nanoseconds(1000));

out.println("Performance for 1000000 operationonds:");
out.println("   in milliseconds: "+milliseconds(1000000));
out.println("   in nanoseconds: "+nanoseconds(1000000));
}
public static long milliseconds(long max) {
// Current time in milliseconds
long time1 = System.currentTimeMillis();
for (int i=0; i<max; i++){
double input = 7.0;
double output = Math.sqrt(input);
}
long time2 = System.currentTimeMillis();
return time2 - time1;
}
public static long nanoseconds(long max) {
// Current time in nanoseconds
long time1 = System.nanoTime();
for (int i=0; i<max; i++){
double input = 7.0;
double output = Math.sqrt(input);
}
long time2 = System.nanoTime();
return time2 - time1;
}
}
```

When executed on my Windows 7 system with JDK 1.7.0, I got this result:

```C:\herong>java SystemCurrentTime
Performance for 1000 operationonds:
in milliseconds: 0
in nanoseconds: 23423
Performance for 1000000 operationonds:
in milliseconds: 8
in nanoseconds: 7679683

C:\herong>java SystemCurrentTime
Performance for 1000 operationonds:
in milliseconds: 0
in nanoseconds: 23011
Performance for 1000000 operationonds:
in milliseconds: 7
in nanoseconds: 7661191

C:\herong>java SystemCurrentTime
Performance for 1000 operationonds:
in milliseconds: 0
in nanoseconds: 24655
Performance for 1000000 operationonds:
in milliseconds: 7
in nanoseconds: 7526821
```

The test result tells me that:

• nanoTime() method is very useful to measure very short durations.
• currentTimeMillis() method seems to be more stable, giving about the same measurement on each run.
• nanoTime() method seems to be less stable, giving different measurements on different runs.
• 1 millisecond is 1,000,000 nanoseconds.

Last update: 2018.