Java持续时间

时间:2020-01-09 10:35:55  来源:igfitidea点击:

" Duration"对象(" java.time.Duration")表示两个" Instant"对象之间的一段时间。 "持续时间"类已从Java 8添加到Java日期时间API。

"持续时间"实例是不可变的,因此一旦创建,就无法更改其值。但是,我们可以通过计算方法在另一个" Duration"对象的基础上创建新的" Duration"对象。我们将在本教程的后面看到如何。

创建持续时间

使用Duration类工厂方法之一完成创建Duration对象。这是一个如何使用between()方法创建Duration对象的例子:

Instant first = Instant.now();

// wait some time while something happens

Instant second = Instant.now();

Duration duration = Duration.between(first, second);

访问持续时间

" Duration"内部包含两个值:

  • 持续时间的纳秒部分
  • 持续时间的第二部分

纳秒部分代表"持续时间"的一部分,小于一秒。第二部分代表"持续时间"的一部分,该部分大于一秒。

请注意,"持续时间"如何没有单独的毫秒部分。仅十亿分之一秒。这与我们以前在System.getCurrentTimeMillis()中使用的时间有所不同,在System.getCurrentTimeMillis()中,时间(或者两个时间间隔)表示为毫秒数。

我们可以使用Duration方法访问持续时间的这两部分:

  • getNano()
  • getSeconds()

我们还可以将整个时间间隔"持续时间"转换为其他时间单位,例如纳秒,分钟,小时或者天。我们可以使用以下转换方法将"持续时间"转换为以下时间单位:

  • toNanos()
  • toMillis()
  • toMinutes()
  • toHours()
  • toDays()

这些方法中的每一种都将由"持续时间"表示的完整时间间隔转换为纳秒,毫秒,分钟,小时或者天。

toNanos()与getNano()的不同之处在于,getNano()仅返回持续时间不到一秒的部分。 toNanos()方法返回转换为纳秒的完整时间间隔。

我们可能会问自己是否没有toSeconds()方法。并不是因为那与Duration的秒数部分相同。如前所述,我们可以使用getSeconds()方法获取"持续时间"的秒数部分。

持续时间计算

" Duration"类包含一组可用于基于" Duration"对象执行计算的方法。其中一些方法是:

  • plusNanos()
  • plusMillis()
  • plusSeconds()
  • plusMinutes()
  • plusHours()
  • plusDays()
  • minusNanos()
  • minusMillis()
  • minusSeconds()
  • minusMinutes()
  • minusHours()
  • minusDays()

这些方法的工作原理非常相似,因此我不会向我们展示它们的工作原理。相反,我将显示一个加号和减号示例。这应该足以使我们了解这些方法的工作原理。

Duration start = ... //obtain a start duration

Duration added      = start.plusDays(3);
Duration subtracted = start.minusDays(3);

本示例首先创建一个名为" start"的" Duration"变量,该变量将用作计算的基础。这个"持续时间"对象的实际创建被忽略了。在本教程的前面,了解如何创建Duration对象。

其次,该示例基于start Duration对象创建了两个新的Duration对象。第一行会创建一个"持续时间",该时间等于"开始"持续时间加上3天。第二行创建的"持续时间"等于"开始"持续时间减去3天。

所有的计算方法都返回新的Duration对象,这些对象代表计算得出的'Duration'。这样做是为了使"持续时间"对象保持不变。