我是靠谱客的博主 称心板凳,最近开发中收集的这篇文章主要介绍JAVA8 LocalDate和LocalDateTime使用JAVA8 LocalDate和LocalDateTime使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JAVA8 LocalDate和LocalDateTime使用

LocalDate是用来计算日期之间的关系

LocalDateTime使用来计算时间差值,到秒级

建议:在编写相关项目的时候,时间应该独立出来编写一个工具类,TimeUtils等,里面写一些常用的方法。

LocalDate

				//获取当前日期
        LocalDate localDate = LocalDate.now();          //输出 2020-03-18

        //主动构造
        LocalDate localDate1 = LocalDate.of(2020, 03, 18);    //输出 2020-03-18

        //Date转LocalDate
        Date date = new Date();
        LocalDate dateToLocalDate = LocalDate.ofInstant(date.toInstant(), 	ZoneId.systemDefault());    //输出 2020-03-18	

计算日期差值:Period

				LocalDate localDate1 = LocalDate.of(2020, 02,01);
        LocalDate localDate2 = LocalDate.of(2020, 02,02);
        Period period = Period.between(localDate1, localDate2);
				//这里请注意,如果日期小的在前面,下面的方法可能为负,  即用  第二个参数 - 第一个参数

        System.out.println(period.getDays());        //1
        System.out.println(period.getMonths());      //0
        System.out.println(period.getYears());       //0

看起来不错啊,就是它了。但是,等一下,再看个例子

				LocalDate localDate1 = LocalDate.of(2020, 01,01);
        LocalDate localDate2 = LocalDate.of(2020, 02,01);      //两个日期差了一个月
        Period period = Period.between(localDate1, localDate2);
        System.out.println(period.getDays());            // 0
        System.out.println(period.getMonths());          //1
        System.out.println(period.getYears());           //0

What? 为什么获取的日期差是0,这么大个坑啊。 那怎么办

发现一个 LocalDate.toEpochDay()。 转换成纪元日期。。,试试

				LocalDate localDate1 = LocalDate.of(2020, 01,01);
        LocalDate localDate2 = LocalDate.of(2020, 02,01);
        long minus = localDate2.toEpochDay() - localDate1.toEpochDay();
        System.out.println(minus);          //31

这次就没问题了.

不过总的来说,这里还是需要学习,否则会采坑。 熟能生巧。

LocalDateTime

获取到时分秒的方法

        //当前日期时间
        LocalDateTime localDateTime = LocalDateTime.now();     2020-03-18
        System.out.println("localDateTime:"+localDateTime);       2020-03-18T15:55:44.307730
        LocalDateTime dt = LocalDateTime.of(2020, 3, 13, 10, 50, 0);
        LocalDateTime localDateTime1 = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
        

计算时间差值:Duration

				Duration duration = Duration.between(dt, localDateTime1);
				System.out.println("间隔天数:"+duration.toDays());      //5
        System.out.println("间隔小时数:"+duration.toHours());   //125
        System.out.println("间隔分钟数:"+duration.toMinutes());  //7505
        System.out.println("间隔秒数:"+duration.toSeconds());    //450344

这个方法,看起来3-18和3-13间隔5天没问题,那么,来改一下参数

				LocalDateTime localDateTime1 = LocalDateTime.of(2020,3,17,23,0,0);
        LocalDateTime localDateTime2 = LocalDateTime.of(2020, 3, 18, 10, 50, 0);
				//按我们的理解,17号和18号差一天的,来看结果
				Duration duration = Duration.between(localDateTime1, localDateTime2);
        System.out.println("间隔天数:"+duration.toDays());      //0
        System.out.println("间隔小时数:"+duration.toHours());   //11
        System.out.println("间隔分钟数:"+duration.toMinutes()); //710
        System.out.println("间隔秒数:"+duration.toSeconds());
			

这里Duration是绝对时间差值,是两个时间点相差的时间,2020-03-17 23:00:00 到 2020-03-18 10:50:00 相差11个小时,所以不够一天。 这个一定要注意区分。

小节

相对时间日期差值

用LocalDate.toEpochDay相减

同一天的时间差值 用Duration

最后

以上就是称心板凳为你收集整理的JAVA8 LocalDate和LocalDateTime使用JAVA8 LocalDate和LocalDateTime使用的全部内容,希望文章能够帮你解决JAVA8 LocalDate和LocalDateTime使用JAVA8 LocalDate和LocalDateTime使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部