Period 时间坑

Posted elegent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Period 时间坑相关的知识,希望对你有一定的参考价值。

jdk1.8 的Period

Period between = Period.between(
                LocalDate.parse("2018-01-01 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
                LocalDate.parse("2019-10-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    System.out.println(between.getYears());
    System.out.println(between.getMonths());
    System.out.println(between.getDays());

输出结果:

1
9
1

now , you get it ??

这里取到的是并不是总的 . 而是各字段上的时间差.

所以如果确定要取的值大于上一个维度 ,

即取的天数大于一个月, 或取的月数大于一年, 就不要用这个方式了. 这是个坑

jdk 给提供了一个计算总月份的方法: toTotalMonths()

public long toTotalMonths() {
    return years * 12L + months;  // no overflow
}

总月份这里就是算上年的了. 月份可以这么取, 天数就得自己想办法了.

joda-time 的Period

Period period = new Period("2018-01-01 00:00:00", "2018-10-02 00:00:00");
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());

输出结果:

1
9
1

简单的使用方式还是一样的.

但 joda 的 Period 给我们提供了单个维度的计算.

//加了PeriodType
Period period = new Period("2018-01-01 00:00:00", "2018-10-02 00:00:00",PeriodType.days());
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());

输出结果:

0
0
639

/(ㄒoㄒ)/~~ , 只计算单个维度 , 其他维度不计算,全是0.

其他工具

Hutool 等 , 有些公司也会有内容自己的工具类

总结

计算时间差不复杂 , 重点是要了解所用工具的正确使用方式.

以上是关于Period 时间坑的主要内容,如果未能解决你的问题,请参考以下文章

QT 实用代码片段

java.time.Period 到秒

If you want something, go get it. Period.---献给《阿甘正传》、《当幸福来敲门》

检查一年是否在PeriodIndex中

period与time的区别?

整数除法的解释——C代码