1 package getAge;
2 import java.text.SimpleDateFormat;
3 import java.util.Calendar;
4 import java.util.Date;
5
6 /**
7 * 根据用户生日精确计算年龄
8 * 用Calender对象取得当前日期对象--从对象中分别取出年月日
9 * @author Administrator
10 *
11 */
12 public class getAgeByBirthday{
13 public static int getAgeByBirth(Date birthday){
14 //Calendar:日历
15 /*从Calendar对象中或得一个Date对象*/
16 Calendar cal = Calendar.getInstance();
17 /*把出生日期放入Calendar类型的bir对象中,进行Calendar和Date类型进行转换*/
18 Calendar bir = Calendar.getInstance();
19 bir.setTime(birthday);
20 /*如果生日大于当前日期,则抛出异常:出生日期不能大于当前日期*/
21 if(cal.before(birthday)){
22 throw new IllegalArgumentException("The birthday is before Now,It's unbelievable");
23 }
24 /*取出当前年月日*/
25 int yearNow = cal.get(Calendar.YEAR);
26 int monthNow = cal.get(Calendar.MONTH);
27 int dayNow = cal.get(Calendar.DAY_OF_MONTH);
28 /*取出出生年月日*/
29 int yearBirth = bir.get(Calendar.YEAR);
30 int monthBirth = bir.get(Calendar.MONTH);
31 int dayBirth = bir.get(Calendar.DAY_OF_MONTH);
32 /*大概年龄是当前年减去出生年*/
33 int age = yearNow - yearBirth;
34 /*如果出当前月小与出生月,或者当前月等于出生月但是当前日小于出生日,那么年龄age就减一岁*/
35 if(monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)){
36 age--;
37 }
38 return age;
39 }
40 /*main方法测试*/
41 public static void main(String[] args){
42 SimpleDateFormat sft = new SimpleDateFormat("yyyy-MM-dd");
43 String sftBirth = "1980-4-25";
44 Date date = null;
45 try{
46 date = sft.parse(sftBirth);
47 }catch(Exception e){
48 e.printStackTrace();
49 }
50 int age = getAgeByBirthday.getAgeByBirth(date);
51 System.out.print("年龄=" + age + "岁");
52 }
53 }