一、duration和period的区别?
①
区别就是两者都可以用作名词,表一段时间时意思相同,其他具体的不同如下
duration中文意思是n. 持续,持续时间
Recently, a zinc gel applied nasally has been shown to greatly reduce the duration of colds.最近,一种应用于鼻腔的锌凝胶被证明可以大大缩短感冒的持续时间。
period中文意思是n. 一段时间,时期;(人生或国家历史的)阶段,时代;(地质年代划分的)纪;课时,节;(练习、训练或学习的)时段;(妇女的)月经,经期;(体育比赛的)局;<美>句号,句点;(物理)(振动或循环的)周期;(天文)自转(或公转)周期;(数学)(周期函数的)周期;(化学)周期元素;(修辞)完整句;(乐)乐段,乐节
②
3、Period和Duration的区别
(1)包含属性不同
Period包含年数,月数,天数,而Duration只包含秒,纳秒。
Period只能返回年数,月数,天数;Duration可以返回天数,小时数,分钟数,毫秒数等。
(2)between方法可以使用的类型不同
Period只能使用LocalDate,Duration可以使用所有包含了time部分且实现了Temporal接口的类,比如LocalDateTime,LocalTime和Instant等。
Period:
public static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
Duration:
public static Duration between(Temporal startInclusive, Temporal endExclusive)
(3)between获取天数差的区别
通过上面的实例可以看出:
Period p.getDays() 获取天数时,只会获取days属性值,而不会将年月部分都计算成天数,不会有2020.1.1和2019.1.1比较后获取天数为365天的情况。
public int getDays() {
return days;
}
Duration d.toDays() 获取天数时,会将秒属性转换成天数。
public long toDays() {
return seconds / SECONDS_PER_DAY;
所以,想要获取2个时间的相差总天数,只能用Duration。
(4)Period有获取总月数的方法,为什么没有获取总天数方法?
Period有获取总月数的方法:
public long toTotalMonths() {
return years * 12L + months;// no overflow
为什么没有获取总天数方法?
因为between后获取到的Period,不会记录2个日期中间的闰年信息,有闰年的存在,每年的天数不一定是365天,所以计算不准确。