用户输入一段时间字符串算出它离1949-10-1有多少天。
import java.util.*;
public class test{
public static void main(String[] args)throws Exception{
Scanner ac=new Scanner(System.in);
String line=ac.nextLine();
Date date =new Date(line);
Calendar time=Calendar.getInstance();
time.setTime(date);
long now_time=time.getTimeInMillis();
time.set(1949, 10, 1);
long old_time=time.getTimeInMillis();
System.out.println((int)((now_time-old_time)/(1000*60*60*24)));

}
}
我的这段代码出错在什么地方?
该怎么写?
分数不多,望谅解。

解决方案 »

  1.   

    在Calendar内部,时间被表示成自格林尼治标准时间(GMT)1970 年1 月1 日,00:00:00(也叫“epoch”)  以来的毫秒数。Calendar.getTimeInMillis()方法返回的也是自从格林尼治标准时间(GMT)1970 年1 月1 日,00:00:00(也叫“epoch”)  以来的毫秒数。所以Calendar处理1970年以前的日期会有问题。
      

  2.   

    ystem.out.println((int)((now_time-old_time)/(1000*60*60*24)));
    这句也不对,应该改为ystem.out.println(((now_time-old_time)/(1000*60*60*24)));
    因为一个月头尾两天相差的毫秒数已经超过了int所能表示的范围,何况相差好几年,只能用long表示。
      

  3.   

            Scanner ac=new Scanner(System.in);
    Integer year=Integer.parseInt(ac.nextLine());
    Integer mouth=Integer.parseInt(ac.nextLine());
    Integer day=Integer.parseInt(ac.nextLine());
    Date date =new Date(year-1900,mouth,day);
    //年份 y 由整数 y - 1900 表示。

    Calendar time=Calendar.getInstance();

    time.setTime(date);
    long now_time=time.getTimeInMillis();
    //月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。  time.set(1949, 10, 1);

    long old_time=time.getTimeInMillis();
    System.out.println((now_time-old_time)/(1000*60*60*24));这样改试试。我调试通过了
      

  4.   

    public class Test {  

        public static void main(String[] args) throws Exception {   
         String line = "1949-10-01";
         while (!(line = new Scanner(System.in).nextLine()).matches("\\d{4}-\\d{2}-\\d{2}")){
         System.out.println("format: yyyy-mm-dd");
         }
         DateFormat df =  new SimpleDateFormat("yyyy-mm-dd");
         System.out.println(
         (df.parse(line).getTime() - df.parse("1949-10-01").getTime())
         / (1000*60*60*24)
         );
        }
    }