What is the difference of using TemporalAmount or TemporalUnit in Java 8?

前端 未结 2 973
悲哀的现实
悲哀的现实 2021-02-19 01:23

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

2条回答
  •  一个人的身影
    2021-02-19 01:49

    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:

    • When you know the unit beforehand, use the appropriate plusXxx method, e.g. time.plusMinutes(10). That's about as easy to read as it gets.
    • When you're trying to represent "logical" calendar amounts, use Period
    • When you're trying to represent "fixed length" amounts, use 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.

提交回复
热议问题