用java计数并输出两个给定日期间的天数

用java计算并输出两个给定日期间的天数。
要求:尽量用简单的代码,最好不要用到try{}方法。
谢谢!
最好提供源代码,谢谢!

单位变化的时间算法
这是你怎样计算两个日期的时间变化:
1. 制作两个日期的拷贝。Close()方法能制作拷贝。
2. 使用日期拷贝,将所有的小于时间单位变化的部分设置成它的最小单位。例如,如果计算天数,那么将小时,分钟,秒和毫秒设置成0。这种情况中,使用clear()方法将时间值设置称他们各自的最小值。
3. 取出较早的日期,将你要计算的单位加1,重复直到两个日期相等。你加1的次数就是答案。可以使用before()和after()方法,他们返回boolean值,来判断是否一个日期在另一个日期之前或之后。
下面的类的方法用来计算天数和月数。
Import java.util.*;
public class ElapsedTime {
public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2.after(g1)) {
gc2 = (GregorianCalendar) g2.clone();
gc1 = (GregorianCalendar) g1.clone();
}
else {
gc2 = (GregorianCalendar) g1.clone();
gc1 = (GregorianCalendar) g2.clone();
}
gc1.clear(Calendar.MILLISECOND);
gc1.clear(Calendar.SECOND);
gc1.clear(Calendar.MINUTE);
gc1.clear(Calendar.HOUR_OF_DAY);
gc2.clear(Calendar.MILLISECOND);
gc2.clear(Calendar.SECOND);
gc2.clear(Calendar.MINUTE);
gc2.clear(Calendar.HOUR_OF_DAY);
while ( gc1.before(gc2) ) {
gc1.add(Calendar.DATE, 1);
elapsed++;
}
return elapsed;
}
public int getMonths(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2.after(g1)) {
gc2 = (GregorianCalendar) g2.clone();
gc1 = (GregorianCalendar) g1.clone();
}
else {
gc2 = (GregorianCalendar) g1.clone();
gc1 = (GregorianCalendar) g2.clone();
}
gc1.clear(Calendar.MILLISECOND);
gc1.clear(Calendar.SECOND);
gc1.clear(Calendar.MINUTE);
gc1.clear(Calendar.HOUR_OF_DAY);
gc1.clear(Calendar.DATE);
gc2.clear(Calendar.MILLISECOND);
gc2.clear(Calendar.SECOND);
gc2.clear(Calendar.MINUTE);
gc2.clear(Calendar.HOUR_OF_DAY);
gc2.clear(Calendar.DATE);
while ( gc1.before(gc2) ) {
gc1.add(Calendar.MONTH, 1);
elapsed++;
}
return elapsed;
}
}
你可以在上面的类中补充另外的方法来处理小时和分钟。同样,计算时间段的算法能更高效一些,尤其是时间相隔很长。可是,作为介绍目的,这个算法有短小和简单的优势。
下面的例子使用ElapsedTime类来计算两个日期之间的天使,而后是月数:
import java.util.*;
public class Example {
public static void main(String[] args) {
GregorianCalendar gc1 = new GregorianCalendar(2001, Calendar.DECEMBER, 30);
GregorianCalendar gc2 = new GregorianCalendar(2002, Calendar.FEBRUARY, 1);
ElapsedTime et = new ElapsedTime();
int days = et.getDays(gc1, gc2);
int months = et.getMonths(gc1, gc2);
System.out.println("Days = " + days);
System.out.println("Months = " + months);
}
}
当计算时,上面的程序可能有用,例如,最近的航班。它显示下面的输出:
Days = 33
Months = 2

参考资料:http://sh.empsoft.cn

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-02
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class GetDay {
public static void main(String[] args) {
day d1 = new day();
day d2 = new day();
int second = 1000; // 转换成秒的参数
int minute = 60; // 转换成分的参数
int hour = 60; // 转换成时的参数
int Day = 24; // 转换成天的参数
long sub = 0; // 日期差值
System.out.println("请输入第一个日期:");
Calendar day1 = d1.setDay();
System.out.println("请输入第二个日期:");
Calendar day2 = d2.setDay();
if (day1.compareTo(day2) < 0) {
sub = day2.getTimeInMillis() - day1.getTimeInMillis();
} else if (day1.compareTo(day2) > 0) {
sub = day1.getTimeInMillis() - day2.getTimeInMillis();
}
int d = (int) (sub / second / minute / hour / Day);// 计算天数
System.out.println(d);//打印
}
}

// 获取时间类
class day {
public Calendar setDay() {
int year = 0;
int month = 0;
int dayofmonth = 0;
Scanner s1 = new Scanner(System.in);
System.out.println("请输入年:");
Scanner s2 = new Scanner(System.in);
year = s1.nextInt();
System.out.println("请输入月:");
Scanner s3 = new Scanner(System.in);
month = s2.nextInt();
System.out.println("请输入日:");
dayofmonth = s3.nextInt();
GregorianCalendar day = new GregorianCalendar(year, month, dayofmonth);
return day;
}
}本回答被提问者采纳
第2个回答  2008-11-02
直接用Calendar类

以下是其中一个构造函数,可以精确到秒

GregorianCalendar(int year, int month, int dayOfMonth)

例如:

GregorianCalendar gc = new GregorianCalendar(2008,10,2);
GregorianCalendar ga = new GregorianCalendar(1998,10,2);

answer=(gc.getTime().getTime()-ga.getTime().getTime())/1000/60/60/24
或者
answer=(gc.getTimeInMillis()-ga.getTimeInMillis())/1000/60/60/24

注意: 那里面2008,10,2 意思是2008年11月2日,因为0代表的是1月

这个过程已经把闰年算进去了的

其实还可以用 Date类 不过不推荐,这里效果是一样的

Date gc = new Date(2000,10,2);
Date ga = new Date(1999,10,2);
gc.getTime();
answer=(gc.getTime()-ga.getTime())/1000/60/60/24;

这里输出为365 其实应该为 366 不知道是哪里出问题了

但是普通闰年都是正确的,难道就是因为不能计算千年就给抛弃了?

不管这个了,你可以都用一下,最后的anwser加一个绝对值就ok了

System.out.println(Math.abs(answer));
相似回答