具体思路:
1、SimpleDateFormat:
是格式和语言环境敏感的方式解析一个类的具体日期。可以格式化(日期→文本),分析(文本→日期),和归一化。
2、Calendar:
抽象类,为一个特定的瞬间和一套 calendar fields如 YEAR, MONTH,
DAY_OF_MONTH, HOUR之间的转换提供了方法,操纵日历字段,例如获得下一周的日期。瞬间可以通过,从 Epoch偏移毫秒值表示,1970年1月1日00:00: 0 GMT(阳历)。
3、ParseException:
可以解析意外到达的一个错误的信号。
4、Scanner:
一个简单的文本扫描程序,可以使用正则表达式解析原始类型和字符串。
一个Scanner打破它的输入令牌使用分隔符模式,默认匹配空格。由此产生的令牌,然后可以转换成价值的不同类型使用不同的next方法。
代码如下:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class BirthDate {
public static void main(String[] args) throws ParseException
{
//创建Scanner
Scanner scanner = new Scanner(System.in);
System.out.println("生日(格式为yyyy-MM-dd):");
String BirthDate = scanner.nextLine();
//将字符串转换为Date类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
date = sdf.parse(BirthDate);
//使用calendar进行计算
Calendar calendar = Calendar.getInstance();
//获取当前时间毫秒值
long now = (new Date()).getTime();
long Birthdate = date.getTime();
long time = now - Birthdate;
int count = 0;
//时间换算
long days = time / 1000 / 60 / 60 / 24;
//判断闰年
int birthYear = Integer.parseInt((BirthDate.substring(0, 4)));
for (int i = calendar.get(Calendar.YEAR); i >= birthYear; i--)
if ((i % 4 == 0 && !(i % 100 == 0)) || (i % 400 == 0)) {
count++;
}
//加入闰年因素进行整理换算
int age = ((int) days - count) / 365;
System.out.println("到目前为止,活了" + age + "岁");
}
}