Java 如何从给定日期查找一周中的某一天?
这是我用来计算天数差异的代码: 把“n”值作为我使用的计数。在此之后,我将使用n%7,并使用剩余部分来获得一天。我使用的参考日期是2000年1月1日,这是一个星期六。 然而,n总是给出0。为什么?怎么了Java 如何从给定日期查找一周中的某一天?,java,bluej,Java,Bluej,这是我用来计算天数差异的代码: 把“n”值作为我使用的计数。在此之后,我将使用n%7,并使用剩余部分来获得一天。我使用的参考日期是2000年1月1日,这是一个星期六。 然而,n总是给出0。为什么?怎么了 我不能使用CALENDAR类。它必须是数学的 public static void main(int d1, int d2, int m1, int m2, int y1, int y2) { int n =0; for(;d1!=d2&&m1!=m2&&
我不能使用CALENDAR类。它必须是数学的
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);
}
这绝对是解决这个问题的好办法。看起来您的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);
}
这是基于Gauss的算法(那家伙是个天才)。你应该使用
Calendar
类。你应该让你的代码更可读。你的代码完全不可读。一些缩进将很好地解决代码问题。很抱歉缩进开始了。“我不能使用日历类。它必须是数学类。”
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);
}