在Java 8中,Duration
类提供了toDays
方法,以与日历日无关的24小时时间块计数的形式返回总天数。
在Java 9中,Duration
类获得了方便的to…Part
方法:toDaysPart
、toHoursPart
、toMinutesPart
、toSecondsPart
、toMillisPart
、toNanosPart
。我理解对时间、分钟等的需求,但我想知道toDaysPart
。
我的问题是:
➥Duration#toDays
和Duration#toDaysPart
会为特定的Duration
对象返回不同的值吗?
在Java 11中,OpenJDK中的这几行源代码是完全相同的。
持续时间#toDays:
public long toDays() {
return seconds / SECONDS_PER_DAY;
}
持续时间#toDaysPart
public long toDaysPart(){
return seconds / SECONDS_PER_DAY;
}
从Java 16开始,没有指示哪一个被弃用或哪一个不被弃用。所以…请密切关注,这是我在这里能给你的最好建议。
这些方法不仅仅做同样的事情;他们被指定在文档中做相同的事情(在您的问题中链接(:
public long toDays()
获取此持续时间内的天数。这通过将秒数除以86400来返回持续时间中的总天数。这是基于一天24小时的标准定义。此实例是不可变的,不受此方法调用的影响。
退货:持续时间中的天数,可能是负
public long toDaysPart()
提取持续时间中的天数。这通过将秒数除以86400来返回持续时间中的总天数。这是基于一天24小时的标准定义。此实例是不可变的,不受此方法调用的影响。
退货:持续时间中的天数,可能是负
唯一的区别是单词";得到";与";提取物";在描述性摘要中。这些单词在本文中没有不同的含义,其余的单词完全相同,特别是指定方法返回内容的部分完全相同。事实上,toDaysPart
的(OpenJDK(文档最近进行了更改,以澄清这些方法的作用相同。所以,是的,它们是多余的。
根据问题跟踪器上的相关问题,所有的to...Part
方法都被添加在一起,并且没有任何关于toDaysPart
将是冗余的事实的评论;因此,我们只能推测添加冗余方法的基本原理。
从TemporalAmount
(以及getSeconds()
和奇怪命名的getNano()
(继承的get(TemporalUnit)
的目的是支持提取组合值的时间分量。Duration
实际上只支持SECONDS
和NANOS
组件访问,因为Duration
只是long
秒组件和int
纳秒组件的组合,它们一起提供纳秒分辨率和,表示大小高达2^63秒的有向值(正和负(。get_
访问器返回仅命名组件,而to_
方法返回目标单元的组合整体值。最后,如果假设Duration
由每个ChronoUnit
值的一个实例组成,则Duration
上的to_Part
方法模拟了get_
方法的行为。该虚拟组件访问中的奇数是toDaysPart
。我怀疑原因是,虽然小时、分钟、秒、毫秒、MICROS和NANOS可以被认为是离散的,并且在它们引用的组件方面不重叠,但当将DAYS视为组件值时,我们不清楚我们指的是星期几、月几还是一年中的某一天,这三种都是常见的约定。类似地,月和年的长度各不相同。因此,作者似乎选择了毫不含糊的方式,并考虑DAYS来表示该层次结构中最粗糙的组件。就我个人而言,我觉得这有点像狗的早餐,我想知道为什么在得出这个结论之前,这两种方法有一段时间是相同的。