日期:2014-05-20  浏览次数:20724 次

奇怪的错误
这个类在编译时没有问题,在运行时得到的结果如下:

输入一个日期:
输入年份:2007
输入月份:1
输入日期:31
2007年2月3日
输入另一个日期:
输入年份:2007
输入月份:12
输入日期:31
2008年0月31日
你输入的两个日期相隔334

正确的应该是:

输入一个日期:
输入年份:2007
输入月份:1
输入日期:31
2007年1月31日
输入另一个日期:
输入年份:2007
输入月份:12
输入日期:31
2007年12月31日
你输入的两个日期相隔334


只要输入带31日的月份,都会出错。

源代码在1.6的环境中运行:

//此类要用jdk1.5.0以上

import   java.util.*;
public   class   OnlyDayInstance   {

/**
  *   @param   args
  */
public   static   void   main(String[]   args)  
{
Calendar   calendar   =   Calendar.getInstance();
Scanner   scanner   =   new   Scanner(System.in);
int   year   =   0   ;
int   month   =   0   ;
int   day   =   0   ;
int   otheryear   =   0   ;
int   othermonth   =   0   ;
int   otherday   =   0   ;
System.out.println( "输入一个日期: ");
System.out.print( "输入年份: ");
year   =   scanner.nextInt();
System.out.print( "输入月份: ");
month   =   scanner.nextInt();
System.out.print( "输入日期: ");
day   =   scanner.nextInt();

calendar.set(year,   month,   day);
System.out.println(calendar.get(Calendar.YEAR)+ "年 "+calendar.get(Calendar.MONTH)+ "月 "+calendar.get(Calendar.DATE)+ "日 ");
long   time1   =   calendar.getTimeInMillis();

System.out.println( "输入另一个日期: ");
System.out.print( "输入年份: ");
otheryear   =   scanner.nextInt();
System.out.print( "输入月份: ");
othermonth   =   scanner.nextInt();
System.out.print( "输入日期: ");
otherday   =   scanner.nextInt();
calendar.set(otheryear,   othermonth,   otherday);
System.out.println(calendar.get(Calendar.YEAR)+ "年 "+calendar.get(Calendar.MONTH)+ "月 "+calendar.get(Calendar.DATE)+ "日 ");
long   time2   =   calendar.getTimeInMillis();
long   distime   =   (time2   -   time1)   /   (1000*60*60*24);
System.out.println( "你输入的两个日期相隔 "+distime);
}

}




------解决方案--------------------
读API不仔细啊,Calender里月份是从0到11的,在处理的时候需要减一加一的。
------解决方案--------------------
月是从0~11滴.
------解决方案--------------------
输入一个日期:
输入年份:2007
输入月份:1
输入日期:31
2007年0月31日
输入另一个日期:
输入年份:2007
输入月份:12
输入日期:31
2007年11月31日
你输入的两个日期相隔334

如果按照 z_lping(Schemer) 说的做的话就会出现上面的结果!
还是不对!