gpt4 book ai didi

java - 在 Java 8 中使用 TemporalAmount 或 TemporalUnit 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:29 25 4
gpt4 key购买 nike

我在 Java 8 中编写了一些使用时间算术的代码。我意识到我可以用不同的方式实现。让我们看看下面的简单代码。当然,结果是一样的,但我很困惑在 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);

提前致谢。

最佳答案

Duration 只能处理固定长度的时间段,例如“小时”、“分钟”、“秒”、“天”(假设每天恰好是 24 小时)。您不能将“月”与 Duration 一起使用,因为一个月的长度各不相同。

Period - 另一个常见的 TemporalAmount 实现 - 分别代表年、月和日。

我个人会推荐:

  • 当你事先知道单位时,使用适当的 plusXxx 方法,例如time.plusMinutes(10)。这几乎是最容易阅读的。
  • 当您尝试表示“逻辑”日历金额时,请使用 Period
  • 当您尝试表示“固定长度”金额时,请使用 Duration

下面是 PeriodDuration 可以不同的示例:

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]
}
}

除非您确实需要,否则我不会担心效率 - 此时您应该有一个基准,以便您可以测试不同的选项。

关于java - 在 Java 8 中使用 TemporalAmount 或 TemporalUnit 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28963110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com