This article will explain different ways in which nanoseconds or nanotime can be converted into seconds in java.
Method 1: Using TimeUnit.convert
java.util.concurrent.TimeUnit is an enum in java that contains values representing different time units such as HOURS, MINUTES, SECONDS, MILLISECONDS, NANOSECONDS etc.
TimeUnit is used to convert values between different time units. Its convert() method can be used to convert a duration in nanoseconds to seconds.

convert() takes 2 arguments
A. Duration to be converted.
B. Unit of this duration. In this case, it will be nanoseconds
Example,

long timeInNanoSeconds = 1000000000;
long seconds = TimeUnit.SECONDS.
                       convert(timeInNanoSeconds, 
                               TimeUnit.NANOSECONDS);
System.out.println(timeInNanoSeconds + " in seconds is " + convert);

Note that the target time unit is the enum value on which convert() is called. In this case, it is SECONDS.
Above example prints

1000000000 in seconds is 1

Method 2: Using TimeUnit.convert
TimeUnit enum has an overloaded convert() method that takes a single argument of type java.time.Duration.

Duration object can be created using its static method ofNanos which takes a long value as argument, which is the time interval or the value to be converted to nanoseconds.

ofNanos() returns a Duration object representing the number of nanoseconds provided to it as argument. Example,

long timeInNanoSeconds = 1000000000L;
// convert nanoseconds to seconds
long seconds = TimeUnit.SECONDS.convert(
                        Duration.ofNanos(timeInNanoSeconds));
System.out.println(timeInNanoSeconds + " in seconds is " + seconds);

Note that the target unit is the one on which convert() is called. This should be SECONDS if you want to convert to seconds.
Output of above example is

1000000000 in seconds is 1

Method 3: Using TimeUnit.toSeconds
TimeUnit has a method toSeconds() that takes a single value as argument and converts it to seconds.
If you are converting nanoseconds to seconds, then this method should be called on TimeUnit.NANOSECONDS as shown below.

long timeInNanoSeconds = System.nanoTime();
// convert to seconds
long seconds = TimeUnit.NANOSECONDS.
                        toSeconds(timeInNanoSeconds);
System.out.println(timeInNanoSeconds + " in seconds is " + seconds);

Output of this example is

611665932118900 in seconds is 611665

Method 4: Division
This method is simple mathematics based on following relation between nanoseconds and seconds.

1 Second = 1000000000 Nanosecond

which means that

1 Nanosecond = 1/1000000000 Second

So, in order to convert nanoseconds to second, divide it by 1000000000 as shown in the below example.

// store start time
long startTime = System.nanoTime();
// halt for 10 seconds
Thread.sleep(10000);
// store end time
long endTime = System.nanoTime();
// get difference
long duration = endTime - startTime;
// convert to nanoseconds
double seconds = (double)duration/1000000000;
System.out.println(duration + " in seconds is " + seconds);

Above example calculates two different times in nanoseconds using System.nanoTime(), calculates the difference between them and then converts it into seconds by dividing with 100000000.
Note that a delay is injected by sleeping the current thread. In actual environment, this might represent a time consuming task.
Above program prints

5001456700 in seconds is 5.0014567

With this method, you can also calculate the time interval taken to perform a task.
Do not forget to hit the clap if the article was useful.

Leave a Reply