自然年怎么计算?
比如 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相关