Java中使用LocalDate根据日期来计算年龄的实现方法

 更新时间:2018年01月07日 13:40:05   作者:程序原养成记  
这篇文章主要介绍了Java中使用LocalDate根据日期来计算年龄的实现方法,需要的朋友可以参考下

Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat

首先吐槽一下,Date和Calendar实际用起来还是有一些别扭的,刚开始用的时候不熟悉,老是分不清Date和Calendar类的具体用法和区别。

而且Calendar类的set方法来设置日期时又有一些反人类,设置月份的时候总是要脑补一下减去1,比如要设置为2018年1月6日就要设置成2018,0,6,因为在这里一月是用0来表示的:

Calendar cal = Calendar.getInstance();
cal.set(2018, 0, 8);

具体的原因可以看这里的回答:StackOverflow: Why is January month 0 in Java Calendar?

反正我是不太看得下去。。

前几天有一个简单的需求,就是根据某两个日期来计算出年龄。上网查了一下,直接抛弃了难用的Date和Calendar类,直接用java.time.LocalDate来做。话不多说直接上代码:

import java.time.LocalDate;

public class TestLocalDate {
  public static void main(String[] args) {
    LocalDate date1 = LocalDate.of(2018, 1, 6);
    LocalDate date2 = LocalDate.of(1991, 1, 3);
    int age = date2.until(date1).getYears();

    System.out.println("You're " + age + " years old.");
  }
}

输出结果:

You're 27 years old.

抛弃了略显复杂令人头大的Date和Calendar类之间的互相转换调用,代码读起来也特别清晰,是不是很爽!

java.time是Java 8中新引入的一个日期时间库,下面的这些方法都是java.time包里面的。

下面来看一下这段代码是怎么来用简单清爽的方式计算时间差的:

首先,LocalDate是一个immutable class(不可变类),所以和String类一样,不需要new一个新的对象才可以使用(?)

然后是LocalDate类用于设定日期的of方法:

public static LocalDate of(int year, Month month, int dayOfMonth)
public static LocalDate of(int year, int month, int dayOfMonth)

of一共有三个重载的方法,这里举出其中的两个。第一个的Month类是一个枚举类型,包含了月份的英文名称,如JANUARY, NOVEMBER等

第二个就是再正常不过的设置年月日,好消息是这里的month是从1开始的,也就是说再也不用手动减去1了!!!

下面是LocalDate类用于比较日期的until方法:

public Period until(ChronoLocalDate endDateExclusive)

这个方法返回的是一个Period类型的对象。

Period代表的是形如“2年,3个月,4天”的一段时间间隔。接下来调用的getYears方法就是属于Period类的。

最后再来看一下Period类的一些获取时间间隔的方法:

public int getYears()
public int getMonths()
public int getDays()

这三个方法分别用于获取时间间隔的年、月和日。对,就是这么简单。

总结

以上所述是小编给大家介绍的Java中使用LocalDate根据日期来计算年龄的实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

相关文章

  • java.sql.SQLException:com.mysql.cj.jdbc.Driver报错问题解决

    java.sql.SQLException:com.mysql.cj.jdbc.Driver报错问题解决

    这篇文章主要给大家介绍了关于java.sql.SQLException:com.mysql.cj.jdbc.Driver报错问题解决的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Java中List与数组之间的相互转换

    Java中List与数组之间的相互转换

    在日常Java学习或项目开发中,经常会遇到需要int[]数组和List列表相互转换的场景,然而往往一时难以想到有哪些方法,最后可能会使用暴力逐个转换法,往往不是我们所满意的,下面这篇文章主要给大家介绍了关于Java中List与数组之间的相互转换,需要的朋友可以参考下
    2023-05-05
  • jdbc链接远程数据库进行修改url操作

    jdbc链接远程数据库进行修改url操作

    这篇文章主要为大家详细介绍了jdbc链接远程数据库进行修改url操作,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 深入理解Java设计模式之简单工厂模式

    深入理解Java设计模式之简单工厂模式

    这篇文章主要介绍了JAVA设计模式之简单工厂模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2021-11-11
  • 详解Java如何在Array和List之间进行转换

    详解Java如何在Array和List之间进行转换

    这篇文章主要为大家介绍了详解Java如何在Array和List之间进行转换的方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 使用springMVC通过Filter实现防止xss注入

    使用springMVC通过Filter实现防止xss注入

    这篇文章主要介绍了使用springMVC通过Filter实现防止xss注入的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 如何让Win10实现Java文件的开机自启动

    如何让Win10实现Java文件的开机自启动

    这篇文章主要介绍了如何让Win10实现Java文件的开机自启动,对于一些想要一直运行的Java文件,就会造成每次系统更新之后的重启导致Java文件无法继续运行。,需要的朋友可以参考下
    2019-06-06
  • HashMap线程不安全问题解析

    HashMap线程不安全问题解析

    这篇文章主要介绍了HashMap线程不安全问题解析,HashMap的线程不安全体现在会造成死循环、数据丢失、数据覆盖等问题,其中死循环和数据丢失是在JDK1.7中出现的问题,在JDK1.8中已经得到解决,但是1.8中仍会有数据覆盖这样的问题,需要的朋友可以参考下
    2023-11-11
  • java中使用try-catch-finally一些值得注意的事(必看)

    java中使用try-catch-finally一些值得注意的事(必看)

    下面小编就为大家带来一篇java中使用try-catch-finally一些值得注意的事(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • java中如何判断JSONObject是否存在某个Key

    java中如何判断JSONObject是否存在某个Key

    这篇文章主要介绍了java中如何判断JSONObject是否存在某个Key,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论