改正的地方:
出问题的地方
正确代码:
public class Test10000 {
public static void main(String[] args) throws ParseException {
System.out.println("----请输入自己的生日:(yyyy-mm-dd)----");
Scanner sc = new Scanner(System.in);
String birth = sc.nextLine();
// 将用户的生日转换为Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(birth);
System.out.println(date1);// 出生的date1
Date date = new Date();
/**
* 计算一万天纪念日,在这计算long型数字运算,数字后面都要加上L
*/
long time10 = (10000L*60L*60L*24L*1000L)+date1.getTime() ;
System.out.println("出生当天的毫秒值: "+date1.getTime());
System.out.println("出生一万天后的毫秒值: "+time10);
date.setTime(time10);
/*
* String format(Date date)
* 将给定的Date表示的日期按照当前SimpleDateFormat
* 指定的格式转换位字符串
*/
String str = sdf.format(date);
System.out.println("10000万天的纪念日: "+str);
}
}
错误代码演示
package day03;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Test10000 {
public static void main(String[] args) throws ParseException {
System.out.println("----请输入自己的生日:(yyyy-mm-dd)----");
Scanner sc = new Scanner(System.in);
String birth = sc.nextLine();
// 将用户的生日转换为Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(birth);
System.out.println(date1);// 出生的date1
/*
* 第一种方法,问题是10000天之后的日期的毫秒值超过了long的取值范围
*/
Date date = new Date();
/**
* 计算一万天纪念日
*/
long time10 = 10000*60*60*24*1000+date1.getTime() ;
System.out.println("一万天的毫秒值: "+10000*60*60*24*1000+" ---答案结果应该是864,000,000,000,");
System.out.println("出生当天的毫秒值: "+date1.getTime());
System.out.println("time10的值: "+time10);
date.setTime(time10);
System.out.println(date);
/*
* 第二种方法计算,先计算从出生到今天多少天,再用10000-度过的天数
*/
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 1602);
System.out.println(calendar.getTime());
}
}