• 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 等 , 有些公司也会有内容自己的工具类

    总结

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

  • 相关阅读:
    好兴奋,我的博客终于上线了
    学技术,该怎么看书
    PHP程序员求职经验总结
    Jquery中extend使用技巧
    JavaScript(JS)实现省市联动选择下拉列表
    银行家算法之JavaScript实现
    JS中的两种刷新方法以及区别和适用范围
    一段上传图片预览JS脚本,Input file图片预览的实现
    本博客模板说明
    深圳,想说爱你不容易!
  • 原文地址:https://www.cnblogs.com/ElEGenT/p/12144030.html
Copyright © 2020-2023  润新知