java Calendar类 根据身份证号获取出生日期、性别、生日是否已过、年龄

本文介绍了一个Java程序,该程序能够从输入的身份证号码中解析出生日期和性别信息,并根据当前日期计算出精确到月和天的年龄。程序首先读取用户输入的身份证号,然后提取出生日期和性别字段,接着使用Java的Calendar类来计算年龄。
package com.oracle.core;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class IdCheck
{

	public static void main(String[] args)
	{
		System.out.println("请输入一个身份证号:");
		Scanner scanner=new Scanner(System.in);
		String id = scanner.next();
		char[] c = id.toCharArray();
		String birthday = "";
		for (int i = 6; i < 14; i++)
		{
			birthday += c[i];
		}
		System.out.println("出生日期:" + birthday);
		char sex1 = id.charAt(16);
		String sex2 = "".valueOf(sex1);
		int sex = Integer.parseInt(sex2);
		if (sex % 2 == 0)
		{
			System.out.println("性别:女性");
		}
		else
		{
			System.out.println("性别:男性");
		}
		// 生成现在的日历
		Calendar now = Calendar.getInstance();
		int now_year = now.get(Calendar.YEAR);
		int now_month = now.get(Calendar.MONTH);
		int now_day = now.get(Calendar.DAY_OF_YEAR);
		// 根据出生日期生成一个日历
		int year = Integer.parseInt(birthday.substring(0, 4));
		int month = Integer.parseInt(birthday.substring(4, 6));
		int day = Integer.parseInt(birthday.substring(6, 8));
		Calendar born = Calendar.getInstance();
		born.set(year, month - 1, day);
		int born_year = born.get(Calendar.YEAR);
		int born_month = born.get(Calendar.MONTH);
		int born_day = born.get(Calendar.DAY_OF_YEAR);
		int age = 0;
		// 做比较
		// 如果月份大于他的月份 说明已过生日,计算年龄
		if (now_month > born_month)
		{
			System.out.println("您的生日已过");
			age = (now_year - born_year);
//			把出生的年设为现在的年
			born.set(Calendar.YEAR, now.get(Calendar.YEAR));
//			计算出生到现在过了多少天
			int days = now_day - born_day;
			Calendar live = new GregorianCalendar();
			live.set(Calendar.MONTH, 0);
			live.set(Calendar.DATE, 1);
			live.add(Calendar.DAY_OF_YEAR, days);
			System.out.println("您的年龄为" + age + "岁零" + live.get(Calendar.MONTH) + "月" + live.get(Calendar.DATE) + "天");
		}
		// 如果月份小于他的月份 生日未过,计算年龄
		else if (now_month < born_month)
		{
			System.out.println("您的生日未过");
			age = (now_year - born_year) - 1;
			born.set(Calendar.YEAR, now.get(Calendar.YEAR));
			int days = now_day - born_day;
			Calendar live = new GregorianCalendar();
			live.set(Calendar.MONTH, 0);
			live.set(Calendar.DATE, 1);
			live.add(Calendar.DAY_OF_YEAR, days);
			System.out.println("您的年龄为" + (age) + "岁零" + live.get(Calendar.MONTH) + "月" + live.get(Calendar.DATE) + "天");
		}

		// 如果月份等于他的月份 未知 要分别判断
		else
		{
			if(now_day>born_day)
			{
				System.out.println("您的生日已过");
				age = (now_year - born_year) - 1;
				born.set(Calendar.YEAR, now.get(Calendar.YEAR));
				int days = now_day - born_day;
				Calendar live = new GregorianCalendar();
				live.set(Calendar.MONTH, 0);
				live.set(Calendar.DATE, 1);
				live.add(Calendar.DAY_OF_YEAR, days);
				System.out.println("您的年龄为" + (age) + "岁零" + live.get(Calendar.MONTH) + "月" + live.get(Calendar.DATE) + "天");
			}
			else if(now_day<born_day)
			{
				System.out.println("您的生日未过");
				age = (now_year - born_year) - 1;
				born.set(Calendar.YEAR, now.get(Calendar.YEAR));
				int days = now_day - born_day;
				Calendar live = new GregorianCalendar();
				live.set(Calendar.MONTH, 0);
				live.set(Calendar.DATE, 1);
				live.add(Calendar.DAY_OF_YEAR, days);
				System.out.println("您的年龄为" + (age) + "岁零" + live.get(Calendar.MONTH) + "月" + live.get(Calendar.DATE) + "天");
			}
			else
			{
				System.out.println("您的生日是今天");
				age = (now_year - born_year) - 1;
				born.set(Calendar.YEAR, now.get(Calendar.YEAR));
				int days = now_day - born_day;
				Calendar live = new GregorianCalendar();
				live.set(Calendar.MONTH, 0);
				live.set(Calendar.DATE, 1);
				live.add(Calendar.DAY_OF_YEAR, days);
				System.out.println("您的年龄为" + (age) + "岁零" + live.get(Calendar.MONTH) + "月" + live.get(Calendar.DATE) + "天");
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值