Java:出生日期转年龄
?
https://blog.csdn.net/qq_44621483/article/details/108573019
?
?
程序記錄:
??通過輸入出生日期字符串,返回年齡
源碼展示:
public static int getAgeForBirthday(String birthday){//定義一個(gè)日期格式y(tǒng)yyy-MM-dd,將String轉(zhuǎn)為DateSimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = simp.parse(birthday);} catch (ParseException e) {e.printStackTrace();}//判斷該生日是否在當(dāng)前日期之前,設(shè)置一個(gè)初始值,表示輸入日期錯(cuò)誤if(date.after(new Date())){return -1;}//獲取當(dāng)前日歷對(duì)象中的年、月、日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轉(zhuǎn)為Calendar日歷對(duì)象,獲取生日的年、月、日nowc.setTime(date);//通過年月日計(jì)算該對(duì)象的年紀(jì)//先通過Year計(jì)算初步年齡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類型不能直接獲取時(shí)間信息,所以將其轉(zhuǎn)為Date類型,但獲取Date類方法獲取的只有毫秒為單位的時(shí)間,直接與當(dāng)前時(shí)間計(jì)算的到的是毫秒值,由于還要考慮當(dāng)前時(shí)間到出生日期間的閏年問題和月份天數(shù)不同等問題,還需要將Date類型轉(zhuǎn)為Calendar類型,Calendar類型可直接獲得當(dāng)前日期和指定日期的年月日,先通過獲取的年獲取大概的年齡,再通過月和日判斷當(dāng)前日期是否已經(jīng)過了生日由此對(duì)大概年齡減1。
?
?
?
Java 根據(jù)出生日期計(jì)算年齡
https://www.cnblogs.com/fuchuanzhipan1209/p/9596614.html
?
Java 根據(jù)出生日期計(jì)算年齡
1.把出生日期字符串轉(zhuǎn)換為日期格式。
| 1 2 3 4 | public?static??Date parse(String strDate)?throws?ParseException { ????????SimpleDateFormat sdf =?new?SimpleDateFormat("yyyy-MM-dd"); ????????return?sdf.parse(strDate); ????} |
2.計(jì)算年齡
| 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)) {?//出生日期晚于當(dāng)前時(shí)間,無法計(jì)算 ????????????throw?new?IllegalArgumentException( ????????????????????"The birthDay is before Now.It's unbelievable!"); ????????} ????????int?yearNow = cal.get(Calendar.YEAR);??//當(dāng)前年份 ????????int?monthNow = cal.get(Calendar.MONTH);??//當(dāng)前月份 ????????int?dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);?//當(dāng)前日期 ????????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;???//計(jì)算整歲數(shù) ????????????if?(monthNow <= monthBirth) { ????????????if?(monthNow == monthBirth) { ????????????????if?(dayOfMonthNow < dayOfMonthBirth) age--;//當(dāng)前日期在生日之前,年齡減一 ????????????}else{ ????????????????age--;//當(dāng)前月份在生日之前,年齡減一 |
| 1 | } }?return?age; } |
3.執(zhí)行方法
| 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工具
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Java:出生日期转年龄的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 青海高原一株柳主要内容 青海高原一株柳主
- 下一篇: Java 判断密码是否是大小写字母、数字