ja截取日期的年月日时间_ja获取date的年月日
我们平时开发日期一般都是使用Date类。在使用Date计算时,一般将会将Date转换成时间戳,即转换成ms后进行计算,这样做很麻烦。当然我们也可以使用三方日期类。
其实Ja8自带的日期类就相当的强大了,基本能满足各种计算。今天我们就来聊聊Ja8里面的日期类。
LocateDate与LocateDateTime
LocateDate获取的是日期,精确到天。LocateDateTime则可以精确到秒。
如上代码,运行结果为:
todayDateTime : 2021-11-02T16:13:02.638todayDate : 2021-11-02
我们需要精确日期到秒时可以使用LocalDateTime。如果只需要精确到天,就可以使用LocalDate,比如判断两个日期是否为同就可以使用LocalDate。
如果你的需求只需要获取时间,不需要日期。可以使用LocalTime。
@Testpublic void getCurrentTime() { LocalTime localTime = LocalTime.now(); System.out.println("localTime :" + localTime);}
运行结果为:
localTime :16:20:20.111
由此可见Ja8后日期类更加丰富了,对日期类的处理也更加人化了。
获取日期的年月日
Ja8的LocalDate里面自带的方法可以获取到日期的年月日。
//获取年、月、日信息@Testpublic 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}
如上代码,返回的是:
Year : 2021 Month : 10 day : 29
判断两个日期是否相等
我们有时会有需求:判断两个日期是否为同。比如签到功能,每次签到前需要判断今天是否已经签到。如果在Ja8之前我们可能会转换成时间戳,通过时间戳作比较。到了Ja8后,我们直接可以使用equals()方法。
如上代码,运行结果为:
today [2021-11-03] 和 date1 [2021-11-03] 是同
LocalDate重写了equals方法。
@Overridepublic 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()方法即可进行判断。
运行结果为:
生日快乐 !!
时间加减
我们经常会计算时间,比如给当前时间加两小时,减两小时等。
上面代码运行结果为:
Time after 2 hours : 16:40:30.997newLocalDateTime after 2 hours : 2021-11-03T16:40:30.997
Ja8的日期不仅可以加小时。秒,月,天,年等都可以加。
如果需要减时间,可以使用minusXXX()方法。
日期大小比较
Ja8可以使用isBefore和isAfter来进行日期之间的比较。
上面代码运行结果为:
Yesterday is day before today
判断闰年
如果需要判断当前年是不是闰年,使用Ja8的isLeapYear非常方便。
@Testpublic void isLeapYear() { LocalDate today = LocalDate.now(); if (today.isLeapYear()) { System.out.println("今年是闰年"); } else { System.out.println("今年不是闰年"); }}
isLeapYear的方法如下
@Overridepublic boolean isLeapYear(long prolepticYear) { return ((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0);}
计算两个日期之间的差
Ja8可以使用Period.between可以获取两个日期之间相差的年月日。
上面代码运行结果
destLocalDate【2018-05-14】到today【2021-11-03】相差了【3】年【5】月【20】天
当然,我们可能还需要计算得更精确,比如计算相差多少天,多少秒等。这时就可以使用ChronoUnit枚举。
ChronoUnit提供了丰富的类别,完全满足各种需求。
今天的文章就写到这里了,如果对你有帮助,欢迎点赞+转发。
看完文章,还可以用支付宝扫描下面的二维码领取一个支付宝红包,目前可领1-88元不等
除了扫码可以领取之外,大家还可以(复制 720087999 打开✔支付宝✔去搜索, h`o`n.g.包哪里来,动动手指就能领)。
看下图所示是好多参与这次活动领取红包的朋友: