📄 birthdaytimes.java
字号:
package com.totyuedu.c69.a20080905;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class BirthdayTimes {
/**
* 根据身份证号码,计算该同学过了多少个生日了
* 要考虑闰年2月29日出生的情况
*
*/
public static void main(String[] args) throws Exception {
String idnum = "330621198402290012";
IdentityCard id = new IdentityCard(idnum);
Date dateBirthday = id.getBirthday();
if (dateBirthday == null) {
return;
}
// 设置生日
Calendar birthday = Calendar.getInstance();
birthday.setTime(dateBirthday);
System.out.println(formatDate(birthday.getTime()));
// 类取得当前日期
Calendar today = Calendar.getInstance();
// 变量births存放过了多少个生日
int births = 0;
// 如果不幸在闰年的2月29日出生
// 注意,Calender对象里,MONTH是月份减1
if (birthday.get(Calendar.MONTH) == 1
&& birthday.get(Calendar.DATE) == 29
&& isLeapYear(birthday.get(Calendar.YEAR))) {
// 从出生那年开始到今年开始循环
for (int i = birthday.get(Calendar.YEAR) + 1; i < today
.get(Calendar.YEAR); i++) {
// 如果是闰年,births++
if (isLeapYear(i)) {
births++;
}
}
// 如果今年是闰年
if (isLeapYear(today.get(Calendar.YEAR))) {
Calendar leapYear = Calendar.getInstance();
leapYear.set(Calendar.MONTH, 1);
leapYear.set(Calendar.DATE, 29);
// 今年2月29日的生日也过了,births++
if (today.after(leapYear)) {
births++;
}
}
} else {
births = today.get(Calendar.YEAR) - birthday.get(Calendar.YEAR);
birthday.set(Calendar.YEAR, today.get(Calendar.YEAR));
if (today.before(birthday)) {
births--;
}
}
System.out.println("身份证号为:" + id.getId() + "的同学到今天为止,过了" + births
+ "个生日了");
}
/**
* 格式化的日期
*
* @param date 需格式化的日期
* @param layout 日期格式,默认为yyyy-MM-dd
* @return 按日期格式格式化后的日期字符串
*/
public static String formatDate(Date date, String layout) {
if (date == null) {
return "";
}
if (layout == null || layout.length() == 0) {
layout = "yyyy-MM-dd";
}
SimpleDateFormat sdf = new SimpleDateFormat(layout);
return sdf.format(date);
}
/**
* 按yyyy-MM-dd格式化的日期
*
* @param date 需格式化的日期
* @return 按yyyy-MM-dd格式化后的日期字符串
*/
public static String formatDate(Date date) {
return formatDate(date, null);
}
/**
* 判断是否为闰年
*
* @param year 年份
* @return 闰年为true,否则为false
*/
public static boolean isLeapYear(int year) {
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -