新手一枚,主要记录自己开发过程。如有错误请留言告知!
业务需求:根据身份证号码计算出年龄,如果直接传生日过来那更方便些。
/// <summary>
/// 计算年龄
/// </summary>
/// <param name="idCardNumber">身份证号</param>
/// <returns>年龄</returns>
public static string GetAge( string idCardNumber)
{
int yaer = int.Parse(idCardNumber.Substring(6,4)); // 获取年
int month = int.Parse(idCardNumber.Substring(10,2));// 获取月
int day = int.Parse(idCardNumber.Substring(12, 2));// 获取日
var birthdayDate = new DateTime(yaer, month, day); // 转DateTime
var nowDate =DateTime.Now; // 当前日期
yaer = nowDate.Year - birthdayDate.Year; // 相差年
month = nowDate.Month - birthdayDate.Month; // 相差月
day = nowDate.Day - birthdayDate.Day; // 相差天
int age = 0; // 年龄
if(yaer < 0)
{
throw new ParamenterException("生日必需晚于当前日期");
}
if (month < 0) // 当前月小于生日月,未过生日(比如:现在6月,生日是7月)
{
age = yaer -1; // 相差-1
}
else if (month == 0) // 当前月等于生日月,本月生日,判断是否为生日当天(比如:现在6月,生日是6月)
{
if (day < 0) // 当前日数小于生日当天,未过生日(比如:现在6月28,生日是6月30)
{
age = yaer - 1; // 相差年-1
}
else // 等于或大于,正在过或者已过生日
{
age = yaer;
}
}
else // 当前月大于生日月(比如:现在6月,生日是5月) 已过生日
{
age = yaer;
}
return age.ToString();
}
以上是C#代码,其实和Java没什么区别,相信大家都能看懂。