当前位置:编程学习 > JAVA >>

自然年怎么计算?

  比如 2012-02-01  到 2013-01-01
           天  周 月 季度  年
2011-12-31 334 48 11 4     1
2012-01-01 335 48 12 4     2

--------------------编程问答--------------------  急,速结贴   --------------------编程问答--------------------  人呢 人呢 这么冷清  --------------------编程问答-------------------- 没看懂问题。。。。。 --------------------编程问答-------------------- 请给出周的定义,即每周的第一天是什么? --------------------编程问答-------------------- 这个代码可以计算两个日期之间的天数(无论是什么年都可以)
public class TianShu{

/**主程序的入口,有多个调用语句用来完成各项功能
   程序无论main中还是方法中,变量的代表含义都是
   一致的:ksn表示“开始的年份”;ksy表示“开始
   的月份”;ksr表示“开始的日份(即那一天)”;
   zzn表示“终止时的年份”;zzy表示“终止的月份”;
   zzr表示“终止的日份”。*/
   
public static void main(String[] args) {
    int ksn=1998;
    int ksy=4;
    int ksr=5;
    int zzn=2001;
    int zzy=2;
    int zzr=16;
    int ts=0;
    
    //引用方法判断日期是否合法
  boolean o = heGeRiQi(ksn,ksy,ksr,zzn,zzy,zzr);
  boolean p = riShiFouHeGe(ksn,ksy,ksr);
  boolean q = riShiFouHeGe(zzn,zzy,zzr);
  
  if(o==false) {
   int n = 1;
   System.exit(n);   //中止程序不再运行下面的语句
  
   }
  else if(p==false||q==false) {
        System.out.println("输入的日份非法!");
   int n = 1;
   System.exit(n);   //中止程序不再运行下面的语句
  
   }
 
 
 
  if(ksn==zzn){                  //同一年时
      if(ksy==zzy)               //同一个月份的天数计算方法调用
         ts = tongNianYue(ksr,zzr);
        else if(((ksn % 4 == 0) && (ksn % 100 != 0)) || (ksn % 400 == 0))   //判断为闰年
                ts = tongRunNianBuYue(ksy,ksr,zzy,zzr);    //闰年天数计算方法调用
           else ts = tongPinNianBuYue(ksy,ksr,zzy,zzr);    //平年天数计算方法调用

    }else {            //不同年的天数计算方法调用
          ts = buTongNian(ksn,ksy,ksr,zzn,zzy,zzr);
    
     }
      System.out.print(ts);

}




//同年同月的计算方法tongNianYue

public static int tongNianYue(int ksr,int zzr) {
int ts = zzr-ksr;
return ts ;
}


//平年的同年不同月的计算方法

public static int tongPinNianBuYue(int ksy,int ksr,int zzy,int zzr) {
int[] yue=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
int ts = yue[ksy-1] - ksr + zzr;

int i = ksy + 1;
while(i<zzy) {
  ts+=yue[i-1];
  i++;
}
return ts ;
}
  
  
  
//润年的同年不同月的计算方法

public static int tongRunNianBuYue(int ksy,int ksr,int zzy,int zzr) {
int[] yue=new int[] {31,29,31,30,31,30,31,31,30,31,30,31};
int ts = yue[ksy-1] - ksr + zzr;

for(int i=ksy+1;i<zzy;i++) 
  ts+=yue[i-1];
return ts ;
}



/*heGeRiQi方法主要用来判断年月是否合格,即都为正数
  且开始年不在终止年之后;同一年的则开始月不在终止
  月之后;同年月的开始日不在终止日之后。  */

public static boolean heGeRiQi(int kn,int ky,int kr,int zn,int zy,int zr) {
boolean tem=true;
if((kn<=0)||(ky<=0)||(kr<=0)||(zn<=0)||(zy<=0)||(zr<=0)) {
      System.out.println("输入的日期非法!");
      tem = false;
}
else if(kn>zn) {
System.out.println("输入的年份非法!");
      tem = false;
    }
else if((kn==zn)&(ky>zy)|(zy>12)) {
System.out.println("输入的月份非法!");
tem = false;
}
else if(kn==zn&ky==zy&kr>zr) {
System.out.println("输入的日份非法!");
  tem = false;
}

  return tem;

}

//判断日份是否合格,即日份不大于所在月份的最大日数
  public static boolean riShiFouHeGe(int nian,int yue,int ri) {
boolean tem = true;
switch(yue) {
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12:
     if(ri>31)
        tem = false;
     break;
 
 case 4:
 case 6:
 case 9:
 case 11:
     if(ri>30)
        tem = false;
     break;
 
 case 2:
     if(((nian % 4 == 0) && (nian % 100 != 0)) || (nian % 400 == 0)) {
         if(ri>29)
           tem = false;
     }else {
         if(ri>28)
           tem = false;
     
      }
     break;
     default :
   }    
  
  return tem;

}

//不同年天数计算方法buTongNian

public static int buTongNian(int ksn,int ksy,int ksr,int zzn,int zzy,int zzr) {
int ts0=0;   //开始年与终止年之间的年份的天数和,不包括开始年与终止年
int ts1=0;   //开始年所在的那一年中的天数
int ts2=0;   //终止年所在的这一年中的天数
int zjs=0;

//计算开始年所在的那一年的天数
if(ksy==12)
    ts1 = tongNianYue(ksr,31);
else {
    if(((ksn % 4 == 0) && (ksn % 100 != 0)) || (ksn % 400 == 0))
              ts1 = tongRunNianBuYue(ksy,ksr,12,31);
      else    ts1 = tongPinNianBuYue(ksy,ksr,12,31);
}

//计算终止年所在的那一年的天数
if(zzy==1)
    ts2 = tongNianYue(1,zzr);
else {
   if(((zzn % 4 == 0) && (zzn % 100 != 0)) || (zzn % 400 == 0))
             ts2 = tongRunNianBuYue(1,1,zzy,zzr);
     else    ts2 = tongPinNianBuYue(1,1,zzy,zzr);
}
//加1是因为把终止年的1月1日当作起始日期计算,即这一天不在算作一天,
//而实际上1月1日还是算一天,故要加1补回来
ts2 = ts2 + 1;

 //计算中间年份的天数
  int i = ksn +1;
while(i<zzn) {
if(((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0))
    zjs += 366;
else zjs +=365;
i++;
ts0 = zjs;
}

//计算总天数  
int ts = ts0 + ts1 + ts2; 
return ts;

}


}
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,