为什么在java.time中无法获得以分钟或小时为单位的持续时间?

在Java

8和更高版本中可用Duration的新JSR

310日期API(java.time包)中的类中,javadoc说:

此类以秒和纳秒为单位对时间量或时间量进行建模。

。此外,可以使用DAYS单位并将其视为等于24小时,因此忽略了夏时制的影响。

那么,为什么以下代码会崩溃?

Duration duration = Duration.ofSeconds(3000);

System.out.println(duration.get(ChronoUnit.MINUTES));

这引发了UnsupportedTemporalTypeException

java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Minutes

at java.time.Duration.get(Duration.java:537)

那么从持续时间对象中提取分钟和小时的推荐方法是什么?我们是否必须根据秒数自己进行计算?为什么采用这种方式?

回答:

“为什么要这样实施?”

其他答案涉及toXxx()允许查询小时/分钟的方法。我将尝试解决原因。

TemporalAmount接口和get(TemporalUnit)方法在此过程的后期添加。我个人并不完全相信我们有足够的证据来证明在该领域中进行设计的正确方法,但是我有些不安TemporalAmount。我相信这样做会稍微混淆API。

事后看来,我认为其中TemporalAmount包含正确的方法,但我认为get(TemporalUnit)应该使用不同的方法名称。原因是get(TemporalUnit)本质上是框架级别的方法-

它不是为日常使用而设计的。不幸的是,方法的名称get并不意味着这一点,导致盲蝽象调用get(ChronoUnit.MINUTES)Duration

所以,想的办法get(TemporalUnit)是想象一个低层次的框架观看量为Map<TemporalUnit,

Long>这里Duration是一个Map大小两次与中键SECONDSNANOS

在是相同的,这样,Period从低级别的框架看作Map大小三- DAYSMONTHSYEARS(其幸好具有较少错误的几率)。

总体而言,对应用程序代码的最佳建议是忽略该方法get(TemporalUnit)。使用getSeconds()getNano()toHours()toMinutes()来代替。

最后,从a获取“ hh:mm:ss”的一种方法Duration是:

LocalTime.MIDNIGHT.plus(duration).format(DateTimeFormatter.ofPattern("HH:mm:ss"))

一点都不漂亮,但是它的有效期不到一天。

to…PartJava 9中的新方法

现在以Java

9实现的JDK-8142936问题添加了以下方法来访问的每个部分Duration

  • toDaysPart
  • toHoursPart
  • toMinutesPart
  • toSecondsPart
  • toMillisPart
  • toNanosPart

以上是 为什么在java.time中无法获得以分钟或小时为单位的持续时间? 的全部内容, 来源链接: utcz.com/qa/406969.html

回到顶部