Java日期时间API系列34

Wesley13
• 阅读 352

  通过Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别中得知,Period可以比较2个日期相差的年月日。年龄计算是2个日期相差的年的值,具体还要根据月日微调,如果小于生日年龄减1。下面使用Period可以非常方便的计算年龄。

1.使用Period一行代码计算生日

核心代码就是一行代码: 

Period.between(birthDay, LocalDate.now()).getYears();

/\*\* \* 计算年龄
 \* @param birthDay
 \* @return int 年龄 \*/
public static int getAge(LocalDate birthDay){
    Objects.requireNonNull(birthDay, "birthDay");
    Period period \= Period.between(birthDay, LocalDate.now()); if (period.getYears() < 0) { throw new DateTimeException("birthDay is before now!");
    } else { return period.getYears();
    }
} /\*\* \* 计算年龄
 \* @param birthDay
 \* @return int 年龄 \*/
public static int getAge(Date birthDay){ return getAge(DateTimeConverterUtil.toLocalDate(birthDay));
} /\*\* \* 计算年龄
 \* @param birthDay
 \* @return int 年龄 \*/
public static int getAge(LocalDateTime birthDay){ return getAge(DateTimeConverterUtil.toLocalDate(birthDay));
}

测试代码:

/\*\* \* 年龄生日测试 \*/ @Test public void getAgeBirthDayTest(){
    Date date \= DateTimeCalculatorUtil.getDate(2000, 6, 4);
    System.out.println(DateTimeCalculatorUtil.getAge(date));
    
}

输出:

20

2.使用Java8以前的Calendar计算生日

public static int getAgeByBirth(Date birthDay) throws ParseException { int age = 0; Calendar cal = Calendar.getInstance(); if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算 throw new IllegalArgumentException( "The birthDay is before Now.It's unbelievable!"); } int yearNow = cal.get(Calendar.YEAR); //当前年份 int monthNow = cal.get(Calendar.MONTH); //当前月份 int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); //当前日期 cal.setTime(birthDay); int yearBirth = cal.get(Calendar.YEAR); int monthBirth = cal.get(Calendar.MONTH); int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); age = yearNow - yearBirth; //计算整岁数 if (monthNow <= monthBirth) { if (monthNow == monthBirth) { if (dayOfMonthNow < dayOfMonthBirth) age--;//当前日期在生日之前,年龄减一 } else { age--;//当前月份在生日之前,年龄减一 } } return age; }

原地址:https://blog.csdn.net/sunnyljs/java/article/details/80934685

测试代码

@Test public void getAgeByBirthTest() throws ParseException{ Date date = DateTimeCalculatorUtil.getDate(2000, 6, 4); System.out.println(getAgeByBirth(date)); }

输出

20

3.对比上面2种方法,Java8 时间api非常方便。

(1)Period线程安全。

(2)Period一行代码非常简洁。

源代码地址:https://github.com/xkzhangsan/xk-time

点赞
收藏
评论区
推荐文章
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
Karen110 Karen110
1年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:Thu Feb 02 2019 09:59:51 GMT+0800 (中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。 1\. 显示日期使用
Wesley13 Wesley13
1年前
Java8 日期、时间操作
<div id="cnblogs\_post\_body" class="blogpost-body"><p>一、简介</p> <p>  在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题。故此,Java8引入了一套全新的日期时间处理API,新的API基于ISO标准
Wesley13 Wesley13
1年前
Java 8中处理日期和时间示例
在Java 8以前,日期和时间处理一直被广大java程序员抱怨太难用,首先是`java.util`和`java.sql`中,都包含`Date`类,如果要处理`java.text.DateFormat`类处理。同时`java.util.Date`中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端。并且也借鉴了第
Wesley13 Wesley13
1年前
Java NIO 系列教程
Java NIO 系列教程 博客分类: java **Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。感谢[并发编程网](https://www.oschina.net/action/GoToLink?url=http%3A%2F%
Wesley13 Wesley13
1年前
Java中六大时间类的使用和区别
[Java中六大时间类的使用和区别](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.cnblogs.com%2Fgreatfish%2Fp%2F6036567.html) ========================================================
Wesley13 Wesley13
1年前
Java 8 时间日期库的20个使用演示样例
除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API。Java对日期,日历及时间的处理一直以来都饱受诟病。尤其是它决定将java.util.Date定义为可改动的以及将SimpleDateFormat实现成非线程安全的。 看
Wesley13 Wesley13
1年前
Java8的时间日期API
原先的时间 api  大部分已经过时了 Date构造器 需要传入年月日  但是对时间的加减操作比较麻烦 Calenda  加减比较方便  使用 LocalDate、 LocalTime、 LocalDateTime * * *  LocalDate、 LocalTime、 LocalDateTIme 类的实例是不可变的对象。分别使用ISO-8601
Wesley13 Wesley13
1年前
Java8中计算日期时间差
一.简述 ---- 在Java8中,我们可以使用以下类来计算日期时间差异: 1.Period 2.Duration 3.ChronoUnit 二.Period类 --------- 主要是Period类方法getYears(),getMonths()和getDays()来计算. 示例:
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表: **时辰** **时间** **24时制** 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 :00 丑时 上午 01:00 - 上午 03:00 01:00 - 03 :00 寅时 上午 03:00 - 上午 0
Stella981 Stella981
1年前
LocalDateTime用法(jdk1.8 )
#### 前言 最近看别人项目源码,发现Java8新的日期时间API很方便强大,所以转载该入门介绍博客,记录一下。 #### 使用新时间日期API的必要性 在java8以前,或许: * 当你在做有关时间日期的操作时,你会想到用Date; * 当你在做日期、月份、天数相加减时,你会想到用Calendar; * 当你需要对时间日期进行格式化时