前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java8中计算日期时间差

Java8中计算日期时间差

作者头像
Java那些事儿
发布2020-07-21 14:43:24
2.9K0
发布2020-07-21 14:43:24
举报
文章被收录于专栏:Java那些事儿

在 Java中,我们要获取一个时间段的天数,我们可以使用下面几种方式:

  1. Period @since 1.8
  2. Duration @since 1.8
  3. ChronoUnit @since 1.8

一. 参数声明

代码语言:javascript
复制
LocalDate start = LocalDate.of(2020, 1, 1);
LocalDate end = LocalDate.of(2020, 5, 1);

二.Period类

主要通过Period类方法getYears()getMonths()getDays()来计算.

示例:

代码语言:javascript
复制
    /**
     * @Author liuwenxu.com (2020-04-26)
     *
     * @param start
     * @param end
     * @return void
     **/
    private static void testPeriod(LocalDate start, LocalDate end) {

        log.info("startPeriod : {}", start);
        log.info("endPeriod : {}", end);

        Period period = Period.between(start, end);
        log.info("[{}~{})之间共有:{}年,{}月,{}日", start, end, period.getYears(), +period.getMonths(), +period.getDays());
    }

结果:

代码语言:javascript
复制
- startPeriod : 2020-01-01
- endPeriod : 2020-05-01
- [2020-01-01~2020-05-01)之间共有:0年,4月,0日

三.Duration类

提供了使用基于时间的值测量时间量的方法:

天数:toDays(); 小时:toHours(); 分钟:toMinutes(); 秒数:toMillis(); 纳秒:toNanos();

示例: 转换日期时提前一天

代码语言:javascript
复制
    /**
     * @Author liuwenxu.com (2020-04-26)
     *
     * @param start
     * @param end
     * @return void
     **/
    private static void testDuration(LocalDate start, LocalDate end) {

        Instant startInstant = start.atStartOfDay(ZoneId.systemDefault()).toInstant();
        Instant endInstant = end.atStartOfDay(ZoneId.systemDefault()).toInstant();

        log.info("startInstant : {}", startInstant);
        log.info("endInstant : {}", endInstant);

        Duration between = Duration.between(startInstant, endInstant);
        log.info("[{}~{})之间共有:{}天", start, end, between.toDays());

    }

结果:

代码语言:javascript
复制
- startInstant : 2019-12-31T16:00:00Z
- endInstant : 2020-04-30T16:00:00Z
- [2020-01-01~2020-05-01)之间共有:121天

四.ChronoUnit类

ChronoUnit类使用between()方法求在单个时间单位内测量一段时间,例如天数、小时、周或秒等。

示例:

代码语言:javascript
复制
	/**
     * @Author liuwenxu.com (2020-04-26)
     *
     * @param start
     * @param end
     * @return void
     **/
    private static void testChronoUnit(LocalDate start, LocalDate end) {
        log.info("startChronoUnit : {}", start);
        log.info("endChronoUnit : {}", end);

        long daysDiff = ChronoUnit.DAYS.between(start, end);
        log.info("[{}~{})之间共有:{}天", start, end, daysDiff);

    }

结果:

代码语言:javascript
复制
- startInstant : 2020-01-01
- endInstant : 2020-05-01
- [2020-01-01~2020-05-01)之间共有:121天

Q.E.D.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 参数声明
  • 二.Period类
  • 三.Duration类
  • 四.ChronoUnit类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档