今天,又被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
热门推荐:
PS:如果觉得我的分享不错,欢迎大家随手点赞、转发、在看。