JAVA JDK8时间类之Period、Duration、ChronoUnit的使用【详解】

1. Duration

1.1 简介:用于时间间隔(秒、毫秒、纳秒等)

Duration类通过年月日时分秒相结合来描述一个时间量,最高精度是纳秒。时间量可以为正也可以为负,比如1天(86400秒0纳秒)、-1天(-86400秒0纳秒)、1年(31556952秒0纳秒)、1毫秒(0秒1000000纳秒)等。

1.2 案例

在这里插入图片描述
打印截图如下:
在这里插入图片描述

2. Period时间间隔(年、月、日)

2.1 简介

Period类通过年月日相结合来描述一个时间量,最高精度是天。时间量可以为正也可以为负,例如10年(10年0个月0天)、8个月(0年8个月0天)、34天(0年0月34天)等

2.2 案例

在这里插入图片描述
运行结果截图如下:
在这里插入图片描述

3. ChronoUnit

3.1 简介

ChronoUnit是java8提供的一个 枚举类,里面定义了很多表示日期/时间的枚举值,提供基于单元的访问来操纵日期,时间或日期时间, 通过实现TemporalUnit来扩展标准单元集。

案例

在这里插入图片描述
运行结果截图如下:
在这里插入图片描述
在这里插入图片描述

4. 案例所有代码:

public static void main(String[] args){
        //案例需求:获取今天到中国近代史的开端的时间差

        //1.获取本地现在的日期对象
        LocalDateTime now = LocalDateTime.now();
        //打印得到结果
        System.out.println(now);//2023-07-16T20:21:41.586513200

        //2.获取近代史开端的时间日期
        LocalDateTime modernHistoryStart =LocalDateTime.of(1840,1,1,0,00,00);
       //打印结果
       System.out.println(modernHistoryStart);//1840-01-01T00:00

       //利用Duration来获取相差的时间
       Duration duration = Duration.between(modernHistoryStart,now);
       System.out.println("相差的时间间隔对象:" + duration);//相差的时间间隔对象:PT1608884H21M41.5865132S


        System.out.println("------------------------------");
        System.out.println(duration.toDays());//获取两个时间差的天数//67036
        System.out.println(duration.toHours()); //两个时间差的小时数//1608884
        System.out.println(duration.toMinutes());//两个时间差的分钟数//96533062
        System.out.println(duration.toMillis()); //两个时间差的毫秒数//5791983766970
        System.out.println(duration.toNanos());//两个时间差的纳秒数//5791983766970625600


        System.out.println("------------------------------------");


        //需求:获取新中国成立到现在的时间间隔对象
        //当前本地 年月日
        LocalDate today = LocalDate.now();
        System.out.println(today);

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


        Period period = Period.between(birthDate,today);//第二个参数减第一个参数


        System.out.println("相差的时间减隔对象:" + period);
        System.out.println(period.getYears());
        System.out.println(period.getMonths());
        System.out.println(period.getDays());


        System.out.println(period.toTotalMonths());

        System.out.println("---------------------------------");

        //需求:获取五四运动至今的时间对象,五四运动时间1919年5月4日
        //当前的时间
        LocalDateTime today1 = LocalDateTime.now();
        System.out.println(today);

        //生日时间
        LocalDateTime birthDate1 = LocalDateTime.of(1949,5,4,0,0,0);
        System.out.println(birthDate);

        System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate1,today1));
        System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate1,today1) );
        System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate1,today1));
        System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate1,today1));
        System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate1,today1));
        System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate1,today1));
        System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate1,today1));
        System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate1,today1));
        System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate1,today1));
        System.out.println("相差的微妙数:" + ChronoUnit.MICROS.between(birthDate1,today1));
        System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate1,today1));
        System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate1,today1));
        System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate1,today1));
        System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate1,today1));
        System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate1,today1));
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java JDK8中,新增了一些时间处理,主要包括以下几个常用: 1. LocalDate:表示日期,可以用来表示年月日的日期,无时区信息。 2. LocalTime:表示时间,可以用来表示时分秒的时间,无日期和时区信息。 3. LocalDateTime:表示日期和时间,可以用来表示年月日时分秒的完整时间,无时区信息。 4. Instant:表示时间戳,可以用来表示从1970年1月1日开始的毫秒数或纳秒数,具有时区信息。 5. Duration:表示时间间隔,可以用来表示两个时间点之间的差距,以秒或纳秒为单位。 6. Period:表示日期间隔,可以用来表示两个日期之间的差距,以年、月或天为单位。 在使用JDK8的时间处理时,可以使用以下方法进行时间转换: 1. 使用LocalDateTime的parse方法将字符串转换为LocalDateTime对象。 2. 使用LocalDateTime的format方法将LocalDateTime对象格式化为指定格式的字符串。 3. 使用DateTimeFormatter来自定义格式化和解析的模式。 4. 使用Instant对象进行时区转换,可以使用atZone方法指定时区。 5. 使用Duration对象进行时间间隔的计算,可以使用toMinutes、toHours、toDays等方法获取不同单位的时间间隔。 6. 使用Period对象进行日期间隔的计算,可以使用getYears、getMonths、getDays等方法获取不同单位的日期间隔。 总结起来,Java JDK8提供了一系列的时间处理,可以方便地进行时间的表示、转换和计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值