计算两个时间内的天数的java程序 出错误了,请大神帮我看看哪里错了,是算法问题么....

importjava.util.*;publicclass间隔日期{publicstaticvoidmain(String[]args){Scannerin=newSca... import java.util.*;
public class 间隔日期 {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int zong=0;/*总日子*/
int runnian=0;/*闰年数*/
int genian=0;/*间隔年数---最后用来记录平年数*/
int cri=0;/*起点月需要扣除的日子*/
int zri=0;/*终点月需要扣除的日子*/
System.out.println("请输入起始年份:");
int nian1=in.nextInt();
System.out.println("请输入起始月份:");
int yue1=in.nextInt();
System.out.println("请输入起始日期:");
int ri1=in.nextInt();
System.out.println("起始时间为:"+nian1+"年"+yue1+"月"+ri1+"日");
System.out.println("请输入终点年份:");
int nian2=in.nextInt();
System.out.println("请输入终点月份:");
int yue2=in.nextInt();
System.out.println("请输入终点日期:");
int ri2=in.nextInt();
System.out.println("终点时间为:"+nian2+"年"+yue2+"月"+ri2+"日");
for(int i=nian1;i<=nian2;i++){
if((((i%4)==0)&&((i%100)!=0))||((i%400)==0)){
runnian++;
}else{
genian++;
}
}/*runnian 为 闰年日子 genian 为平年日子*/
System.out.println("期间平年有:"+genian+"年"+"\t"+"期间闰年有:"+runnian+("年"));
for(int i=yue1;i!=0;i--){
if(i==2){
if((((nian1%4)==0)&&((nian1%100)!=0))||((nian1%400)==0)){
cri=cri+29;
}else{
cri=cri+28;
}
}else{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
cri=cri+31;
}else{
cri=cri+30;
}
}
}
for(int i=yue2;i!=0;i--){
if(i==2){
if((((nian1%4)==0)&&((nian1%100)!=0))||((nian1%400)==0)){
zri=zri+29;
}else{
zri=zri+28;
}
}else{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
zri=zri+31;
}else{
zri=zri+30;
}
}
}
if((((nian2%4)==0)&&((nian2%100)!=0))||((nian2%400)==0)){
zri=366-zri;
}else{
zri=365-zri;
}
zong=(genian*365)+(runnian*366)+ri1+ri2;
zong=zong-cri-zri;
System.out.println("期间一共有:"+zong+"天。");
}
}
展开
 我来答
火——火
推荐于2016-01-14 · TA获得超过1701个赞
知道小有建树答主
回答量:944
采纳率:100%
帮助的人:927万
展开全部


假设上图中C点为你所输入的年月日(不妨假设为2013-4-4),那么A就是该年的第一天,即2013-1-1,B为你输入那个月份的第一天,即2013-4-1,D为你输入的那个月份的最后一天,即2013-4-30,E为你输入那年的最后一天,即2013-12-31.

同样H为你输入第二个日期,其余点类似。

现在要求出CH的值。(假设后输入日期在前输入的日期之后)


你现在的算法是这样的。

1) zong = (genian * 365) + (runnian * 366) + ri1 + ri2;

即:zong = AJ                                  +BC    + GH.

(genian * 365) + (runnian * 366) = AJ; ri1=BC; ri2=GH.


2) zong = zong - cri - zri;

  cri=AB; zri=IJ

那么最后的结果为:AJ+BC+GH-AB-IJ这是不对的。


应该这样来算:CH = AJ-AB-BC-HJ

其中AJ=(genian * 365) + (runnian * 366)

AB=cri;   BC=ri1;  HJ=(HI+IJ)

IJ=zri;  HI= 第二个日期所在月的天数(28/29/30/31)-ri2.

历盆郁7
2013-09-24 · TA获得超过4277个赞
知道大有可为答主
回答量:1795
采纳率:100%
帮助的人:960万
展开全部
import java.util.Calendar;

public class $ {
    public static void main(String[] args) {

        Calendar from = Calendar.getInstance();
        from.set(2013, Calendar.JANUARY, 1);// 2013-01-01

        Calendar to = Calendar.getInstance();
        to.set(2013, Calendar.FEBRUARY, 1);// 2013-02-01

        System.out.println(to.get(Calendar.DAY_OF_YEAR) - from.get(Calendar.DAY_OF_YEAR));
    }
}

API里的方法,多简单,这个小算法,适合在学C的时候练手用,java的精髓不在这里。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-24
展开全部
原程序的运行,只要输入是符合日期的数字,没有什么问题的。

但计算呢,就不知道是不是正确了。参考这个结果

假如

int nian1=1999, yue1=10, ri1=10;

int nian2=2004, yue2=10, ri2=10;
你的计算结果是

期间一共有:1846天。

java.util.Date d1=new java.sql.Date(nian1, yue1, ri1);
java.util.Date d2=new java.sql.Date(nian2, yue2, ri2);
long dif = d2.getTime()-d1.getTime();
System.out.println("期间一共有:"+(dif/1000/60/60/24)+"天。");
这方法的计算结果是
期间一共有:1826天。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Spencer_MC
2013-09-24 · 超过27用户采纳过TA的回答
知道答主
回答量:137
采纳率:0%
帮助的人:77.5万
展开全部
//设置上一个时间,year年份, month月份, day天数
Calendar beginTime = new GregorianCalendar(year, month, day);
nowTime = new GregorianCalendar(); //当前时间
int millisecondOfDay = 24*60*60*1000;
long dayNum = (nowTime.getTimeInMillis()-beginTime.getTimeInMillis())/millisecondOfDay;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b5dbdb6ad
2013-09-24
知道答主
回答量:28
采纳率:0%
帮助的人:6.5万
展开全部
把报错贴出来了啊,不要等着别人读你的程序!
追问
并不是代码错误,只是计算的时候会出现多一天的情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式