分别使用Jdk8和8以前的特性解决一个年龄大小的问题
需求:键盘输入一个年龄,来求年龄到底有多大?
在Jdk8以前的版本中,只能依靠Date()获得当前时间和基准时间,这个基准时间就是1970年8:00,然后利用毫秒数进行计算,然后转换为年。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class DateYear{
public static void main(String[] args) throws ParseException {
//键盘录入一个人的生日,例如2000-03-04
Scanner sc=new Scanner(System.in);
System.out.println("请输入生日");
String birth=sc.nextLine();
//先求输入值与1970年之间的时间长度
Date date1=new Date(0L);
//这里是进行格式化
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
//将字符串格式化进行解析
Date date2 = simpleDateFormat.parse(birth);
//现在需要的是date2-date1的毫秒数
long date1Time = date1.getTime();
long date2Time = date2.getTime();
//我们还需要当前时间毫秒数
Date date3=new Date();
long date3Time = date3.getTime();
//当前时间-(输入时间-基准时间)=你的年龄
long day=(date3Time-(date2Time-date1Time))/1000/60/60/24;
long year=(date3Time-(date2Time-date1Time))/1000/60/60/24/365;
System.out.println("你的年龄为:"+year+"岁");
}
}
我们可以看到,在上面的输入过程中就要输“yyyy-MM-dd HH:ss:mm”,显的很麻烦,我们通常都不使用时分秒。
但是在Jdk8中提供了很多新特性
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
public class LocalDateYear {
public static void main(String[] args) {
//键盘录入一个人的生日
/*
刚才我们使用了jdk1.8以前版本,现在使用新特性来完成,将使用atTime
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的生日,格式为xxxx-xx-xx");
String birthday=sc.nextLine();
//这里我们不需要时分秒,我们需要的是年月日,因此我们只需要格式化成年月日即可
DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDat1 = LocalDate.parse(birthday,dateTimeFormatter);
//new一个当前的年月日
LocalDate localDate2 = LocalDate.now();
//使用period就可以获得年份
Period period = Period.between(localDat1, localDate2);
System.out.println("你的年龄为"+period.getYears()+"岁");
}
}
网友评论