jdk1.8的新特性——时间日期之LocalDate

现在开始忘了jdks1.8之前的时间日期API,开始一个新的纪元。jdk1.8的时间日期API简直不要太好用,谁用谁知道。接下来让我们一起探索这个新的API。:D

这些新的API位于java.time包下,我们接下来按照开发者使用的角度来探索如何使用新的API。说到日期,首先我们想到的就是如何获取今日的日期,那让我们看看新的API是如何做的吧。

public static void main(String[] args) {
        //获取当前日期: 2019-08-10
        LocalDate today = LocalDate.now();
        //获取年:2019
        int year = today.getYear();
        //获取月:8
        int month = today.getMonthValue();
        //获取日:10
        int day = today.getDayOfMonth();
    }
注意:System.out.println(today);本文都会省略。

当然,我们可以从today对象中获取年,月,日。这些方法是不是很容易记忆,而且没有1.8之前的Date获取年份后会减去1900,获取月份减去1。所以新版的API是一种人机交互友好的API,不用开发者过多的记忆和考虑杂七杂八的问题。再让我们看看如何获取昨天和明天吧,显然昨天就是在今天的日上减去1(其实就是相当于加上-1),明天是在今天的基础上加上1。既然是含有“加”含义的方法,那么API的方法中肯定含有plus,敲出today.plus看看IntelliJ IDEA 都有哪些提示。

看,我们发现了什么。:D 是不是很酷?当然了,如果我们敲出today.minus也是会出现对应的方法,只不过minus是减的意思。来看看plusDay的源码注释~

我们简单看看注释,返回一个在此LocalDate对象上指定加了多少天的副本,此方法将指定的数量添加到days字段上,并根据需要递增month和year字段,以确保结果仍然有效。当超出最大/最小年份时,结果无效。举例:2008-12-31加上一天后的结果为2009-01-01。此实例是不可变的,不受此方法调用的影响。参数:指定加的天数,可能是负数。返回:基于此LocalDate对象相加天数后返回的LocalDate,不为null。抛出异常情况:如果结果超出日期范围抛出DateTimeException异常。

现在我们知道如何获取与今天指定相隔多少天,多少周,多少月,多少年的方法了,那么我们再来看看如何判断获取后的LocalDate对象与今天LocalDate对象的大小比较。API中提供了实例方法,isAfter(ChronoLocalDate other),isBefore(ChronoLocalDate other)

       //获取昨天的LocalDate对象:2019-08-09
        LocalDate yesterday = today.plusDays(-1);
        //获取明天的LocalDate对象:2019-08-11
        LocalDate tomorrow = today.plusDays(1);

        //判断yesterday是不是在today之后:false
        boolean flag = yesterday.isAfter(today);
        //判断yesterday是不是在today之前:true
        boolean flag1 = yesterday.isBefore(today);

接下来,我们看看如何创建一个“1994-08-10”LocalDate的对象。并将其与today比较

        //根据年月日创建LocalDate对象:2019-08-10
        LocalDate otherDay = LocalDate.of(2019,8,10);
        //根据文本创建LocalDate对象:1994-08-10
        LocalDate birthday = LocalDate.parse("1994-08-10");

        //判断两个日期是否相等:true
        boolean isSameDay = otherDay.equals(today);
        //判断两个日期是否相等:false
        boolean isBirthday = birthday.equals(today);

如果想在一个LocalDate对象上修改年、月、日而后获取新的LocalDate对象,我们可以使用withYear(int year),withMonth(int month),withDayOfMonth(int dayOfMonth)。

        //在otherDay基础上年月日都向后移动1个单位:2020-09-11
        LocalDate anotherDay = otherDay.withYear(2020).withMonth(9).withDayOfMonth(11);

        //获取2020年最后一天:2020-12-31
        LocalDate lastDay = anotherDay.withDayOfYear(366);

        //判断2020年是否为闰年:true
        boolean isLeapYear = lastDay.isLeapYear();

可以看到withDayOfMonth和withDayOfYear的区别,前者是当月的天,范围在0-31,后者是当年的天,范围在1-366,闰年才会有366。

最后补充几个实用的方法:

    
        //根据字符串文本创建LocalDate对象(JAVA诞生日):1995-05-23
        LocalDate javaBirthday = LocalDate.parse("1995-05-23");
        //判断 javaBirthday 是否为闰年:false
        boolean isLeapYear = lastDay.isLeapYear();

        //获取 javaBirthday 是哪一年:1995
        int weekBasedYear = javaBirthday.get(IsoFields.WEEK_BASED_YEAR);
        //获取 javaBirthday 是该年的第几周:21
        int weekOfWeekBasedYear = javaBirthday.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);

        //获取 javaBirthday 是该年的第几季度:2
        int quarterOfYear = javaBirthday.get(IsoFields.QUARTER_OF_YEAR);
        //获取 javaBirthday 是该季度的第几天:53
        int daysOfQuarter = javaBirthday.get(IsoFields.DAY_OF_QUARTER);

如果对你有帮助,请同学们关注点赞~

下一篇:jdk1.8的新特性——时间日期之LocalTime

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值