【Java】工具类

一、引入

继续往下,我们来学习JDK8新增时间类的第四部分。

第四部分它是三个工具类,可以用来计算时间的间隔。

  • Duration:它在计算时间的时候侧重于 纳秒 的计算
  • Period:在计算时间间隔的时候,只能算 年、月、日
  • ChronoUnit:它可以计算所有单位的间间隔

image-20240424123902475

因此在学习的时候,我们只需要知道这三个各自的特点就行了

image-20240424165433588

二、Period

可以计算 年、月、日 之间的时间间隔,看下面代码

// 通过LocalDate.now()获取到当前本地的日历对象 年月日
LocalDate today = LocalDate.now();
System.out.println(today);

// 生日的 年月日
LocalDate birthDate = LocalDate.of(2000, 1, 1);
System.out.println(birthDate);

// 此时可以通过 between() 计算两个时间的间隔
// PS:在计算的时候是用第二个参数减第一个参数,因此birthDate应该放到第一个参数,today放到第二个参数
// 方法会返回一个 `period` 对象,这个就表示时间间隔对象
Period period = Period.between(birthDate, today);

System.out.println("相差的时间间隔对象:" + period); // 相差的时间间隔对象:P24Y3M23D(24年3月23天)
// 如果我们通过 get方法 去获取,就可以把上面的 24、3、23 获取出来
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());

// 获取这个时间间隔中总共有多少个月
System.out.println(period.toTotalMonths()); // 291

三、Duration

它更加侧重于 纳秒 的计算,侧重点相对来讲比较精确一点。

// 使用LocalDateTime获取到当前时间的日历对象
LocalDateTime today = LocalDateTime.now();
System.out.println(today);

// 再定义一个LocalDateTime用来指定出生的日历对象
LocalDateTime birthDate = LocalDateTime.of(2000, 1, 1, 0, 0, 0);
System.out.println(birthDate);

// 利用 Duration 调用静态方法 between() 计算两个时间的间隔
// 在计算的时候跟刚刚一样,还是用第二个参数减第一个参数
// 方法会返回时间间隔对象 Duration
Duration duration = Duration.between(birthDate, today);
System.out.println("相差的时间间隔对象:" + duration); // 相差的时间间隔对象:PT213137H3M22.4781845S —— 这两个时间直接间隔 213137小时,3分钟,22.4781845秒

System.out.println("============================================");
// 下面我们可以将这个时间转换成整体的天数、小时、毫秒、纳秒,用的是 to 开头的方法
System.out.println(duration.toDays());// 两个时间差的天数
System.out.println(duration.toHours());// 两个时间差的小时数
System.out.println(duration.toMinutes());// 两个时间差的分钟数
System.out.println(duration.toMillis());// 两个时间差的毫秒数
System.out.println(duration.toNanos());// 两个时间差的纳秒数

四、ChronoUnit

第三个类是我们最为常用的,因为它能计算的单位非常的多,是最全面的一个,因此这个类是需要大家重点掌握的。

// 同样的,还是获取到当前时间的日历对象
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
// 生日的日历对象
LocalDateTime birthDate = LocalDateTime.of(2000, 1, 1, 0, 0, 0);
System.out.println(birthDate);

// 再往下就可以计算两个时间的间隔了
// 用 ChronoUnit 去调用里面的属性 YEARS,调用 YEARS 就表示:我要计算两个时间之间相差多少年
// 在计算的时候跟刚刚一样,还是用第二个参数减第一个参数
System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today));
// 如果调用 MONTHS,就表示两个时间之间相差多少月
System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today));
// 调用 WEEKS,表示两个时间之前相差多少周
System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today));
System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today));
System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today));
System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today));
System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today));
System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today));
System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today));
System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today));
System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today));
System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today));
System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today));
System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today));
System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));
  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值