我是靠谱客的博主 称心板凳,最近开发中收集的这篇文章主要介绍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使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复