前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >尽管Java8时间库有所进步,但总感觉Low了点,有同感吗?

尽管Java8时间库有所进步,但总感觉Low了点,有同感吗?

作者头像
业余草
发布2020-12-29 10:35:27
5120
发布2020-12-29 10:35:27
举报
文章被收录于专栏:业余草业余草

你知道的越多,不知道的就越多,业余的像一棵小草!

你来,我们一起精进!你不来,我和你的竞争对手一起精进!

编辑:业余草

toutiao.com/i6886042266360775181

推荐:https://www.xttblog.com/?p=5133

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

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

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

Date和LocalDate互转代码

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

代码语言:javascript
复制
LocalDate ld;
Date date = ld.toDate();

或者:

代码语言:javascript
复制
Date date;
LocalDate ld = LocalDate(date);
LocalDate ld = LocalDate.from(date);

看看人家Joda-time:

代码语言:javascript
复制
// from Joda to JDK
DateTime dt = new DateTime();
Date jdkDate = dt.toDate();

// from JDK to Joda
dt = new DateTime(jdkDate);
代码语言:javascript
复制
// from Joda to JDK
DateTime dt = new DateTime();
Calendar jdkCal = dt.toCalendar(Locale.CHINESE);
// from JDK to Joda
dt = new DateTime(jdkCal);

Java不愧为“渣瓦”,哎,不过兴许还真是咱太菜吧,没法领悟 Java 大佬的设计精髓。虽然,数据库可以直接转 Localdate。Mybatis 也支持 Localdate 和 Localdatetime。但是 Java 内部的 Date 和 Localdate 相互之前转换起来真的不够“温柔”。

问题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,这还有天理吗?

代码语言:javascript
复制
private LocalDate dateToLocalDate(Date date) {
    Instant instant = date.toInstant();
    return LocalDate.from(instant);
}

居然报异常了

所以,Java8 时间库虽然进步很大,但在可用性上还真差点意思,Java 程序员已经比较苦逼啦,能不能体量体量撒。

都说 Java 太过“啰嗦”,API 不够简洁。业余草建议直接用 Long,但是 Long 也有一些小问题的,比如闰秒问题。所以,还是看个人选择!

说归说,吐槽归吐槽。Localdate 和 Localdatetime 的优先级还是要比 Date 高。毕竟,Java8 已经不推荐使用 Date 了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你知道的越多,不知道的就越多,业余的像一棵小草!
  • 编辑:业余草
  • toutiao.com/i6886042266360775181
  • 推荐:https://www.xttblog.com/?p=5133
  • 问题1:Java8中的LocalDate与Date互转
  • 问题2:Calendar和Java8就是完全两张皮
  • 问题3:Date还不能直接转LocalDate,这还有天理吗?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档