我是靠谱客的博主 俭朴糖豆,这篇文章主要介绍还在为日期计算烦恼?Java8帮你轻松搞定,现在分享给大家,希望可以做个参考。

我们平时开发日期一般都是使用Date类。在使用Date计算时,一般将会将Date转换成时间戳,即转换成ms后进行计算,这样做很麻烦。当然我们也可以使用第三方日期类。

其实Java8自带的日期类就相当的强大了,基本能满足各种计算。今天我们就来聊聊Java8里面的日期类。

LocateDateLocateDateTime

LocateDate获取的是日期,精确到天。LocateDateTime则可以精确到秒。

如上代码,运行结果为:

复制代码
1
2
3
todayDateTime : 2021-11-02T16:13:02.638 todayDate : 2021-11-02

我们需要精确日期到秒时可以使用LocalDateTime。如果只需要精确到天,就可以使用LocalDate,比如判断两个日期是否为同一天就可以使用LocalDate

如果你的需求只需要获取时间,不需要日期。可以使用LocalTime

复制代码
1
2
3
4
5
6
@Test public void getCurrentTime() {   LocalTime localTime = LocalTime.now();   System.out.println("localTime :" + localTime); }

运行结果为:

复制代码
1
2
localTime :16:20:20.111

由此可见Java8后日期类更加丰富了,对日期类的处理也更加人性化了。

获取日期的年月日

Java8的LocalDate里面自带的方法可以获取到日期的年月日。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
//获取年、月、日信息 @Test public void getDetailDate() {     LocalDate today = LocalDate.now();     int year = today.getYear();     int month = today.getMonthValue();     int day = today.getDayOfMonth();     Console.log("Year : {}  Month : {}  day : {}", year, month, day);     //Year : 2021  Month : 10  day : 29 }

如上代码,返回的是:

复制代码
1
2
Year : 2021  Month : 10  day : 29

判断两个日期是否相等

我们有时会有需求:判断两个日期是否为同一天。比如签到功能,每次签到前需要判断今天是否已经签到。如果在Java8之前我们可能会转换成时间戳,通过时间戳作比较。到了Java8后,我们直接可以使用equals()方法。

如上代码,运行结果为:

复制代码
1
2
today [2021-11-03] 和 date1 [2021-11-03] 是同一天

LocalDate重写了equals方法。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Override public boolean equals(Object obj) {     if (this == obj) {         return true;     }     if (obj instanceof LocalDate) {         return compareTo0((LocalDate) obj) == 0;     }     return false; } int compareTo0(LocalDate otherDate) {     int cmp = (year - otherDate.year);     if (cmp == 0) {         cmp = (month - otherDate.month);         if (cmp == 0) {          cmp = (day - otherDate.day);         }     }     return cmp; }

从重写的equals源码来看,是将两个日期的年月日依次作比较。

计算生日

如果我们知道用户的出生日期,我们要判断今天是不是用户的生日。我们就可以使用MonthDay这个类。

如上代码,通过MonthDay可以获取到月和日,然后直接使用equals()方法即可进行判断。

运行结果为:

复制代码
1
2
生日快乐 !!

时间加减

我们经常会计算时间,比如给当前时间加两小时,减两小时等。

上面代码运行结果为:

复制代码
1
2
3
Time after 2 hours : 16:40:30.997 newLocalDateTime after 2 hours : 2021-11-03T16:40:30.997

Java8的日期不仅可以加小时。秒,月,天,年等都可以加。

如果需要减时间,可以使用minusXXX()方法。

日期大小比较

Java8可以使用isBeforeisAfter来进行日期之间的比较。

上面代码运行结果为:

复制代码
1
2
Yesterday is day before today

判断闰年

如果需要判断当前年是不是闰年,使用Java8的isLeapYear非常方便。

复制代码
1
2
3
4
5
6
7
8
9
10
@Test public void isLeapYear() {     LocalDate today = LocalDate.now();     if (today.isLeapYear()) {         System.out.println("今年是闰年");     } else {         System.out.println("今年不是闰年");     } }

isLeapYear的方法如下

复制代码
1
2
3
4
5
@Override public boolean isLeapYear(long prolepticYear) {     return ((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0); }

计算两个日期之间的差

Java8可以使用Period.between可以获取两个日期之间相差的年月日。

上面代码运行结果

复制代码
1
2
destLocalDate【2018-05-14】到today【2021-11-03】相差了【3】年【5】月【20】天

当然,我们可能还需要计算得更精确,比如计算相差多少天,多少秒等。这时就可以使用ChronoUnit枚举。

ChronoUnit提供了丰富的类别,完全满足各种需求。

今天的文章就写到这里了,如果对你有帮助,欢迎点赞+转发。

最后

以上就是俭朴糖豆最近收集整理的关于还在为日期计算烦恼?Java8帮你轻松搞定的全部内容,更多相关还在为日期计算烦恼内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部