读书人

奇怪的异常

发布时间: 2011-12-06 23:05:08 作者: rapoo

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

输入一个日期:
输入年份: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) 说的做的话就会出现上面的结果!
还是不对!

读书人网 >J2SE开发

热点推荐