题意:
求某人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
思路:
通过毫秒值计算天数。
利用:来自https://www.cnblogs.com/xiohao/p/5294412.html
Date fDate=sdf.parse("2015-12-31");
Date oDate=sdf.parse("2016-01-01");
long days=(oDate.getTime()-fDate.getTime())/(1000*3600*24);
//注意:如果时间为:2016-03-18 11:59:59 和 2016-03-19 00:00:01的话差值为 0
还有一种求天数差的方法方法:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date fDate=sdf.parse("2015-12-31");
Date oDate=sdf.parse("2016-01-01");
Calendar aCalendar = Calendar.getInstance();
aCalendar.setTime(fDate);
int day1 = aCalendar.get(Calendar.DAY_OF_YEAR);
aCalendar.setTime(oDate);
int day2 = aCalendar.get(Calendar.DAY_OF_YEAR);
int days=day2-day1; /*在不涉及到跨年的情况,此种方法是没问题的
* 但是设计跨年的情况,此种方法回出问题的哦
*
* 如果时间为:2016-03-18 11:59:59 和 2016-03-19 00:00:01的话差值为 1
*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; public class Main{ public static void main(String[] args) throws ParseException {
Scanner scanner=new Scanner(System.in);
SimpleDateFormat fm=new SimpleDateFormat("yyyy-MM-dd");
int n=scanner.nextInt();
while(n-->0)
{
String bir=scanner.next();
String yearStr=bir.substring(0,4);
String monthStr=bir.substring(5,7);
String dayStr=bir.substring(8, 10);
int month=Integer.parseInt(monthStr);
int day=Integer.parseInt(dayStr); int year=Integer.parseInt(yearStr);
int after=year+18;
if(year%4==0||(year%100!=0&&year%400==0))//出生是闰年2.29
{//18岁不是闰年,就没有2.29
if(month==2&&day==29&&!(after%4==0||(after%100!=0&&after%400==0)))
{
System.out.println("-1");
continue;
}
} Date bird=fm.parse(bir);
String ehString=String.valueOf(after);
ehString+="-";
ehString+=String.valueOf(month);
ehString+="-";
ehString+=String.valueOf(day);
Date eighteen=fm.parse(ehString); long res=(eighteen.getTime()-bird.getTime())/(1000*3600*24);
System.out.println(res); }
} }