Java持续时间
" 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'。这样做是为了使"持续时间"对象保持不变。