I write some piece of code in Java 8 which use time arithmetic. I realize that I can implement in differentways. Lets look at simple code below. Of course it is the same result but I confused which way is mostly applied or most efficient to make arithmetic operations in Java 8 ?
LocalTime time = LocalTime.now();
// 1st way
LocalTime plusOp = time.plus(Duration.ofMinutes(10L));
// 2nd way
LocalTime plusOp2 = time.plus(10L, ChronoUnit.MINUTES);
System.out.println(plusOp);
System.out.println(plusOp2);
// 3. way simply
time.plusMinutes(10L);
Thanks in advance.
Duration
can only handle fixed-length periods, such as "hours", "minutes", "seconds", "days" (where it assumes exactly 24 hours per day). You can't use "months" with Duration
, because a month varies in length.
Period
- the other common TemporalAmount
implementation - represents years, months and days separately.
Personally I would recommend:
plusXxx
method, e.g. time.plusMinutes(10)
. That's about as easy to read as it gets.Period
Duration
Here's an example of where Period
and Duration
can differ:
import java.time.*;
public class Test {
public static void main(String[] args) {
ZoneId zone = ZoneId.of("Europe/London");
// At 2015-03-29T01:00:00Z, Europe/London goes from UTC+0 to UTC+1
LocalDate transitionDate = LocalDate.of(2015, 3, 29);
ZonedDateTime start = ZonedDateTime.of(transitionDate, LocalTime.MIDNIGHT, zone);
ZonedDateTime endWithDuration = start.plus(Duration.ofDays(1));
ZonedDateTime endWithPeriod = start.plus(Period.ofDays(1));
System.out.println(endWithDuration); // 2015-03-30T01:00+01:00[Europe/London]
System.out.println(endWithPeriod); // 2015-03-30T00:00+01:00[Europe/London]
}
}
I wouldn't worry about the efficiency until you really need to - at which point you should have a benchmark so you can test different options.
See more on this question at Stackoverflow