今天,又被Java8的时间库恶心到了,有同感的举手...

Posted xhmj12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天,又被Java8的时间库恶心到了,有同感的举手...相关的知识,希望对你有一定的参考价值。

点击关注下方公众号,Java资料都在这里

被毁约+幸运避开裁员后成功上岸!

上一篇:40岁开始学习Android开发的我成了一名技术主管

在我所在公司和项目中,实际上时间库应用不算太多,用到也是非常简单的一些应用场景,一般情况下连Java8的时间库都很少用到,今天为了写个时间查询,把我折腾够呛,是我没有领悟到Java8时间库的精髓吗?还是我的功力不够?一起来看看吧

需求:给定一个时间范围:Date from, Date to,查询出在这时间范围内的记录并按日期(年月日)分组,每条记录的日期是包含日期和时间的,需要进行Truncate。如果只输入一个日期,那么只统计该天的所有记录,即0时0分0秒到23时59分59秒之间的记录。

问题1:Java8中的LocalDate与Date互转

Date和LocalDate互转代码

这个互转的写法应该是比较正统的吧,老铁们应该没有什么异议。我就想说都是一家的,这转换咋就这么麻烦呢?正常不是应该这样吗:

LocalDate ld;
Date date = ld.toDate();

或者:

Date date;
LocalDate ld = LocalDate(date);
LocalDate ld = LocalDate.from(date);

看看人家Joda-time:

// from Joda to JDK
DateTime dt = new DateTime();
Date jdkDate = dt.toDate();

// from JDK to Joda
dt = new DateTime(jdkDate);
// from Joda to JDK
DateTime dt = new DateTime();
Calendar jdkCal = dt.toCalendar(Locale.CHINESE);
// from JDK to Joda
dt = new DateTime(jdkCal);

Java不愧为“渣瓦”,哎,不过兴许还真是咱太菜吧,没法领悟Java大佬的设计精髓

问题2:Calendar和Java8就是完全两张皮

实现一个功能:给定一个Date,只截取年、月、日,并将其分解为两个Date,一个是XXXX年XX月XX日 00:00:00和XXXX年XX月XX日 23:59:59

用Calendar实现的代码

林哥直接把项目中的代码片段截了个图,各位看官是不是觉得非常累赘,可不是嘛,用Java8的时间库也简洁不到哪里去,写法如下:

Java8时间库的写法

堂堂Java8的时间库,连基本的截取(truncate)操作都木有,哎,说你什么好呢,“渣瓦”!

我们再看看Joda的“骚”操作:

Joda时间库的写法

简洁的不得了哦

问题3:Date还不能直接转LocalDate,这还有天理吗?

private LocalDate dateToLocalDate(Date date) 
    Instant instant = date.toInstant();
    return LocalDate.from(instant);

居然报异常了

所以,Java8时间库虽然进步很大,但在可用性上还真差点意思,Java程序员已经比较苦逼啦,能不能体量体量撒,期待后续版本会继续迭代吧,让我们拭目以待。

作者:大话JAVA
www.toutiao.com/i6886042266360775181

THE END

热门推荐:

PS:如果觉得我的分享不错,欢迎大家随手点赞、转发、在看。

以上是关于今天,又被Java8的时间库恶心到了,有同感的举手...的主要内容,如果未能解决你的问题,请参考以下文章

java8新特性

被Win11系统恶心到了

牛客练习——吐泡泡(简单的栈的运用题:别被多组输入恶心到了)

java8新特性

Reactive native 项目创建失败如何处理

这家公司,太过恶心,今天必须曝光它!