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根据日期来计算年龄的更多相关文章

  1. SQL 根据日期精确计算年龄

    SQL 根据日期精确计算年龄 第一种: 一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄 datediff(year,birthday,getdate()) 例:birt ...

  2. Java中关于Date等日期类的简单使用

    Date Date类不常用,很多方法被废弃了,常用它的两个构造方法来new一个Date对象. Date d1 = new Date(); //不传任何参数,代表当前时间点 System.out.pri ...

  3. JAVA中使用P和Q分量计算N和D进行RSA运算

    最近在使用Java中需要使用PQ形式的私钥进行RSA加解密运算,本来以为Java中应该很多类似的例子,发现所有的例子都是从ND形式的私钥,竟然没有人用分量P和Q计算N和D进行运算.对Java使用RSA ...

  4. Java中如何判断一个日期字符串是否是指定的格式

    判断日期格式是否满足要求 import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date ...

  5. Java 中如何格式化一个日期?如格式化为 ddMMyyyy 的形式?

    Java 中,可以使用 SimpleDateFormat 类或者 joda-time 库来格式日期. DateFormat 类允许你使用多种流行的格式来格式化日期.参见答案中的示例代 码,代码中演示了 ...

  6. java中经常使用的日期格式化(全)

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  7. Java中String的哈希值计算

    下面都是从String类的源码中粘贴出来的 private int hash; // Default to 0 public int hashCode() { int h = hash; if (h ...

  8. Java中json前后端日期传递处理

    这里推荐2种方式 依赖包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifa ...

  9. Java 中,如何对日期进行加减操作

    今天在做项目时,遇到了对时间的加减进行操作的需求,根据传入的日期字符串,操作参数("+","-"),加数(要操作的天数),对日期进行加减操作,经查询资料,自己写 ...

随机推荐

  1. THinkPHP简单漂亮的分页类 DownLoad

    PHP include_once("config.php"); require_once('page.class.php'); //分页类 $showrow = 10; //一页显 ...

  2. 学习python登录demo

    要求编写登录接口 : 1. 输入用户名和密码 2.认证成功后显示欢迎信息 3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序) 4.用户名正确,密码错误,提示密码错误,重新 ...

  3. 打开和创建SqlCe(.sdf文件)

    打开SqlCe的工具有些少,目前能看到Vs2010安装插件之后打开.sdf文件 [转载]https://weblogs.asp.net/scottgu/vs-2010-sp1-and-sql-ce 需 ...

  4. select联动遇到的问题

    今天写了个select下拉联动,记录下过程中遇到的问题. dom部分 // 拿到选中项的索引 myselect.selectedIndex // 拿到选中项的text/value myselect.o ...

  5. Jarvis OJ - [XMAN]level0 - Writeup

    差不多最简单的pwn了吧,不过本菜鸟还是要发出来镇楼 分析一下,checksec 查看程序的各种保护机制 没有金丝雀,没有pie 执行时输出Hello,World,在进行输入,溢出嘛  开工 丢到id ...

  6. javaweb学习总结(六)——Servlet开发(二)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文 ...

  7. Nexys3学习手记1:写在前面的话

    偶然的机会,结识了xilinx的几位大牛,便毫不客气的从他们的手中接过了基于Spartan-6的由Digilent公司研发的Nexys3开发板(如图1所看到的).记得非常久非常久曾经初识FPGA的时候 ...

  8. google C++编程风格指南之头文件的包括顺序

    google C++编程风格对头文件的包括顺序作出例如以下指示: (1)为了加强可读性和避免隐含依赖,应使用以下的顺序:C标准库.C++标准库.其他库的头文件.你自己project的头文件.只是这里最 ...

  9. Android最佳性能实践(四)——布局优化技巧

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43376527 在前面几篇文章其中.我们学习了怎样通过合理管理内存,以及高性能编码技 ...

  10. mysql主从备份及常见问题处理

    1.mysql主从备份基本原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新 ...