3
    LocalDateTime start = LocalDateTime.of(2018, 9, 2, 14, 17, 25, 135);
    LocalDateTime end = LocalDateTime.of(2018, 9, 2, 14, 19, 59, 965);
    Duration duration = Duration.between(start, end);

I need to get result in this format : 2:34.830.

Minutes and nanoseconds - no problem :

    System.out.println(duration.toMinutes());
    System.out.println(duration.toNanos());

but how can I gain seconds - 34 seconds from this example?

Private
  • 61
  • 1
  • 2
  • 5

2 Answers2

5

What you are looking for is the following:

System.out.println(duration.getSeconds()%60);

Alternatively,

System.out.println(duration.getSeconds() - duration.toMinutes()*60);

From Java 9, there is a dedicated method for this toSecondsPart():

System.out.println(duration.toSecondsPart());
Pankaj Singhal
  • 15,283
  • 9
  • 47
  • 86
0

With some math, you can get it like expected.

        long minutes = duration.toMinutes();
        long seconds = duration.getSeconds() % 60;
        long nanoSeconds = duration.toNanos() % 1000_000_000L;
        System.out.println(String.format("%d:%d.%d", minutes, seconds, nanoSeconds));

Output:

2:34.830

Edit: After @M. Prokhorov's comment, extending it for hours also, similarly:

    long hours = duration.toHours();
    long minutes = duration.toMinutes() % 60;

And format it like:

System.out.println(String.format("%d:%d:%d.%d", hours, minutes, seconds, nanoSeconds));

Output:

0:2:34.830
Shafiul
  • 1,452
  • 14
  • 21