这是我用来计算天数差异的代码: 将'n'值视为我用作计数的值。在此之后我使用n%7并使用剩余部分来获得一天。我使用的参考日期是1.1.2000,这是一个星期六。 但是,n总是给0.为什么?怎么了?
我不能使用日历类。它必须是数学的。
public static void main(int d1, int d2, int m1, int m2, int y1, int y2)
{
int n =0;
for(;d1!=d2&&m1!=m2&&y1!=y2;n++)
{
if(m1==1 || m1==3 || m1==5 || m1==7 || m1==8 || m1==10 || m1==12)
{
if(d1==31)
{
m1++;
d1=1;
n++;
if(m1>12)
{
m1=1;
y1++;
}
}
else
{
d1++;
n++;
}
}
else if(m1==4 || m1==6 || m1==9 || m1==11)
{
if(d1==30)
{
m1++;
d1=1;
n++;
if(m1>12)
{
m1=1;
y1++;
}
}
else
{
d1++;
n++;
}
}
else if(m1==2)
{
if(returnLeap(y1))
{
if(d1==29)
{
m1++;
d1=1;
n++;
}
else
{
d1++;
n++;
}
}
else
{
if(d1==28)
{
m1++;
d1=1;
n++;
}
else
{
d1++;
n++;
}
}
}
}
System.out.println(n);
}
答案 0 :(得分:0)
这绝对是解决这个问题的大方法。看起来你的for循环将在日,月或年中的任何一个匹配时终止。你可能想要在所有3个匹配时终止,比如
for(;d1!=d2||m1!=m2||y1!=y2;n++)
如果您愿意接受其他建议,那么
public static void main(int d, int m, int y)
{
int n = (d + 5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year - 1) % 400)) % 7;
switch (m) {
case 12: n += 30;
case 11: n += 31;
case 10: n += 30;
case 9: n += 31
case 8: n += 31;
case 7: n += 30
case 6: n += 31
case 5: n += 30
case 4: n += 31
case 3: n += 28;
if(returnLeap(y)) { n++; }
case 2: n += 31;
}
System.out.println(n % 7);
}
这是基于高斯的算法(这个家伙是天才)。
答案 1 :(得分:-2)
Calendar cal = Calendar.getInstance();
cal.set(2013, 7, 1);
Date startDate = cal.getTime();
cal.clear();
cal.set(2013, 8, 1);
Date endDate = cal.getTime();
long diffDays = (endDate.getTime() - startDate.getTime()) / 1000 / 60 / 60 / 24;