首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java8中使用TemporalAmount或TemporalUnit有什么不同?

在Java8中使用TemporalAmount或TemporalUnit有什么不同?
EN

Stack Overflow用户
提问于 2015-03-10 19:56:52
回答 2查看 21.4K关注 0票数 17

我用Java8写了一些使用时间算法的代码。我意识到我可以用不同的方式来实现。让我们看一下下面的简单代码。当然,这是相同的结果,但我搞不懂在Java8中,哪种方法是最常用的,还是最有效的?

代码语言:javascript
复制
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);

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-10 20:05:11

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

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

我个人建议:

  • 如果事先知道单位,请使用适当的plusXxx方法,例如time.plusMinutes(10)。当你试图表示“合乎逻辑的”日历金额时,使用Period
  • When当你试图表示“固定长度”的金额时,使用Duration

以下是PeriodDuration的不同之处的示例:

代码语言:javascript
复制
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]
    }
}

我不会担心效率,直到你真的需要-在这一点上,你应该有一个基准,以便您可以测试不同的选项。

票数 29
EN

Stack Overflow用户

发布于 2015-03-10 20:03:14

如果查看源代码,就会发现plus(long amountToAdd, TemporalUnit unit)方法使用plusXXX方法生成结果。所以这里没有关于效率的争论。

相反,您可以使用最适合您的场景的任何一个。我建议,如果您使用用户输入来决定是否添加小时、分钟等,则plus()方法更好。否则,如果您使用plusXXX,您的代码可能更容易阅读。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28963110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档