Java:出生日期转年龄

  private int getAge(Date birthDay) {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);//计算整岁数int age = yearNow - yearBirth;if (monthNow <= monthBirth) {if (monthNow == monthBirth) {if (dayOfMonthNow < dayOfMonthBirth) {//当前日期在生日之前,年龄减一age--;}} else {//当前月份在生日之前,年龄减一age--;}}return age;}

 

https://blog.csdn.net/qq_44621483/article/details/108573019

 

 

程序记录:

  通过输入出生日期字符串,返回年龄

源码展示:

public static int getAgeForBirthday(String birthday){//定义一个日期格式yyyy-MM-dd,将String转为DateSimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = simp.parse(birthday);} catch (ParseException e) {e.printStackTrace();}//判断该生日是否在当前日期之前,设置一个初始值,表示输入日期错误if(date.after(new Date())){return -1;}//获取当前日历对象中的年、月、日Calendar nowc = Calendar.getInstance();int nowYear = nowc.get(Calendar.YEAR);int nowMonth = nowc.get(Calendar.MONTH);int nowDay = nowc.get(Calendar.DAY_OF_MONTH);//将Date转为Calendar日历对象,获取生日的年、月、日nowc.setTime(date);//通过年月日计算该对象的年纪//先通过Year计算初步年龄int year = nowYear-nowc.get(Calendar.YEAR);//通过Month和Day判断是否过生日if(nowc.get(Calendar.MONTH)>nowMonth){return year-1;}if (nowc.get(Calendar.DAY_OF_MONTH)>nowDay){return year-1;}return year;}

思路

  由于String类型不能直接获取时间信息,所以将其转为Date类型,但获取Date类方法获取的只有毫秒为单位的时间,直接与当前时间计算的到的是毫秒值,由于还要考虑当前时间到出生日期间的闰年问题和月份天数不同等问题,还需要将Date类型转为Calendar类型,Calendar类型可直接获得当前日期和指定日期的年月日,先通过获取的年获取大概的年龄,再通过月和日判断当前日期是否已经过了生日由此对大概年龄减1。

 

 

 

Java 根据出生日期计算年龄

https://www.cnblogs.com/fuchuanzhipan1209/p/9596614.html

 

Java 根据出生日期计算年龄

1.把出生日期字符串转换为日期格式。

1

2

3

4

public static  Date parse(String strDate) throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        return sdf.parse(strDate);

    }

2.计算年龄

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public static  int getAge(Date birthDay) throws Exception {

        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);  

        int age = yearNow - yearBirth;   //计算整岁数

            if (monthNow <= monthBirth) {

            if (monthNow == monthBirth) {

                if (dayOfMonthNow < dayOfMonthBirth) age--;//当前日期在生日之前,年龄减一

            }else{

                age--;//当前月份在生日之前,年龄减一

1

} } return age; }

3.执行方法

1

2

3

4

5

6

7

8

public static void main(String[] args) {

        try {

          int  age = getAge(parse("1990-09-27"));           //由出生日期获得年龄***

          System.out.println("age:"+age);

        catch (Exception e) {

            e.printStackTrace();

        }

    }

  

 

分类: java工具

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现BUG自动检测 - ASP.NET Core依赖注入

我个人比较懒&#xff0c;能自动做的事绝不手动做&#xff0c;最近在用ASP.NET Core写一个项目&#xff0c;过程中会积累一些方便的工具类或框架&#xff0c;分享出来欢迎大家点评。 如果以后有时间的话&#xff0c;我打算写一个系列的【实现BUG自动检测】&#xff0c;本文将是…

java语音播报案例

在做项目的过程中&#xff0c;我们往往会用到语音播报——把文字转换成语音播放出来&#xff0c;自动识别语言进行播报&#xff0c;那么我们现在来看看怎么操作&#xff1a; 1.下载jacob.jar&#xff0c;下载地址&#xff1a;这里 2.32位操作系统下载&#xff1a;jacob-…

玩转SpringBoot之定时任务详解

玩转SpringBoot之定时任务详解 https://www.cnblogs.com/mmzs/p/10161936.html 玩转SpringBoot之定时任务详解 阅读目录&#xff1a; 序言一、静态&#xff1a;基于注解二、动态&#xff1a;基于接口三、多线程定时任务阅读正文&#xff1a; 回到顶部 序言 使用SpringBoot创…

Java开发人员必知必会的20种常用类库和API

转载自 Java开发人员必知必会的20种常用类库和API 一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车。《Effective Java》的作者Joshua Bloch曾经说过&#xff1a;“建议使用现有的API来开发&#xff0c;而不是重复造轮子”。在本文中,我将分享一些Java开发人员应…

sql server操作案例

今天没事做&#xff0c;总结了下sql server的些知识&#xff1a; --创建表 CREATE TABLE users (id INT ,name VARCHAR(50),age INT )--添加数据 SELECT * FROM users INSERT INTO users VALUES(2,张三1,13); INSERT INTO users VALUES(4,王五,12,山西省吕梁市,DEFAULT); --默…

左耳朵耗子:不灌鸡汤,说真的年龄渐长,技术人的发展之路该怎么走

技术圈中的很多人&#xff0c;最初都坚定地认为coding能改变世界。然而三五年过去后&#xff0c;还能不忘初心的人&#xff0c;少之又少。随着年龄的增长&#xff0c;梦想已被束之高阁&#xff0c;面包慢慢占据生活的大部分。对于个人发展&#xff0c;很多成功学者会给你灌各种…

集合中重写equals方法删除new的对象

COPYOverride public boolean equals(Object obj) {//1.是否为同一对象if (thisobj) {return true;}//2.判断是否为空if (objnull) {return false;}//3.判断是否是Student类型if (obj instanceof Student) {Student student(Student) obj;//4.比较属性if(this.name.equals(stud…

Java开发必须掌握的5种加密策略

转载自 Java开发必须掌握的5种加密策略 本文总结自《大型电商分布式系统实践——第四课》。文末给出获取全套PPT及视频的方式。 一、数字摘要 数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。如果消息在传…

Java String格式日期加1秒(分钟或小时) java时间减一分钟,并且进行比较-时间相关的处理

https://blog.csdn.net/java0311/article/details/78047878 Java String格式日期加1秒&#xff08;分钟或小时&#xff09; chuan9966 2017-09-21 09:15:07 17101 收藏 6 文章标签&#xff1a; String格式日期加1秒 data日期加1秒 日期加1秒 版权 需求&#xff1a; 将如下…

sql server案例总结

--通过insert select 插入数据到已存在的表中 create table grade1 ( id int , name varchar(50) )insert into grade1 select * from grade select * from grade1--通过select into 语句将现有表中的数据添加到新表中&#xff0c;执行两边的话&#xff08;数据库中已存在名为…

聊下JVM内存模型

转载自 聊下JVM内存模型 1. JVM内存模型 2. 程序计数器(PC) 每个线程都会有自己私有的程序计数器(PC)。可以看作是当前线程所执行的字节码的行号指示器。 也可以理解为下一条将要执行的指令的地址或者行号。字节码解释器就是通过改变这个计数器的值来选取下一条需要执行的字节码…

泛型集合

作用 它是一个泛型类&#xff0c;而之前使用的时候并没有传递&#xff0c;说明java语法是允许的&#xff0c;这个时候传递的类型是Object类&#xff0c;虽然它是所有类的父类&#xff0c;可以存储任意的类型&#xff0c;但是在遍历、获取元素时需要原来的类型就要进行强制转换。…

ASP.NET Core + Angular 2 Template for Visual Studio

多个月以来&#xff0c;我和多个Github上的社区贡献者一起建立支持库、包&#xff0c;我们最终的目的是希望完成这样一个作为起点的模板&#xff0c;也就是基于把Typescript代码和Angular2宿主在ASP.NET Core项目中&#xff0c;这个模板包含一下这些方面&#xff1a; 服务端预加…

MyBatis中if - else if - else 的使用

http://www.leftso.com/blog/765.html 不过有他的替代 choose,写法如下&#xff1a; <choose><when test"params!null">right JOIN</when><otherwise>LEFT JOIN</otherwise></choose> 复制 <choose><when test…

Servlet使用适配器模式进行增删改查案例(Emp.java)

package org.entity;/*** * * 项目名称&#xff1a;test_BaseDao * 类名称&#xff1a;Emp * 类描述&#xff1a; 员工实体类 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2017-9-13 上午8:45:47 * 修改人&#xff1a;Mu Xiongxiong * 修改…

java发送http的get、post请求

转载自 java发送http的get、post请求 Http请求类 package wzh.Http;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.Li…

C#高性能TCP服务的多种实现方式

☆ 哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣&#xff0c;为了吸引眼球所以标题中一定要突出&#xff0c;其实我更喜欢的标题是《猴赛雷&#xff0c;C#编写TCP服务的花样姿势&#xff01;》。 本篇文章的主旨是使用 .NET/C# 实现 TCP 高性能服务的不同方式&a…

mysql中 where in 用法详解

https://blog.csdn.net/haibo0668/article/details/52584307 sssss mysql中 where in 用法详解 我是高手高手高高手 2016-09-19 11:33:29 102915 收藏 14 分类专栏&#xff1a; php MY SQL &#xfeff;&#xfeff; 这里分两种情况来介绍 WHERE column IN (value1,valu…

Servlet使用适配器模式进行增删改查案例(Dept.java)

package org.entity;/*** * * 项目名称&#xff1a;test_BaseDao * 类名称&#xff1a;Dept * 类描述&#xff1a; 部门表的实体类 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2017-9-13 上午8:44:37 * 修改人&#xff1a;Mu Xiongxiong *…