如何创建一个算法,在不使用java.util.Calendar的情况下返回给定日期中的字符串DayOfWeek
我试图写一个算法,让我能够确定一个给定日期是一周中的哪一天。我在互联网上看到我可以导入java.util.calendar,但不幸的是我不允许使用它;相反,我必须自己创建算法。 这是我到目前为止写的,但不幸的是它不起作用。有什么想法吗? 谢谢如何创建一个算法,在不使用java.util.Calendar的情况下返回给定日期中的字符串DayOfWeek,java,algorithm,Java,Algorithm,我试图写一个算法,让我能够确定一个给定日期是一周中的哪一天。我在互联网上看到我可以导入java.util.calendar,但不幸的是我不允许使用它;相反,我必须自己创建算法。 这是我到目前为止写的,但不幸的是它不起作用。有什么想法吗? 谢谢 我相信您的代码可能会起作用,如果您只做以下细微更改: 更改此行: return(lastwodights+lastwodigitsdiv12+lastwodigitsliments+lastwodigitslimentsdivfour+day+month)
我相信您的代码可能会起作用,如果您只做以下细微更改: 更改此行:
return(lastwodights+lastwodigitsdiv12+lastwodigitsliments+lastwodigitslimentsdivfour+day+month)%finalMod代码>
关于这一行:
Integer.toString(返回(lastTwoDigits+LastTwoDigitsDivLeven+LastTwoDigitsRequires+lastTwoDigitsRemainderDivFour+day+month)%finalMod)代码>
但是,您可能希望使用常用的心理计算方法。以下是维基百科上的描述链接:
这是最可读的形式,我认为非常适合您的项目。以下是一个简短的描述:
(d+m+y+(y/4)+c)%7
哪里:
d是月份的第几天,m是月份表格中的月份编号,y是年份的最后两位数字,c是世纪编号
月份表是唯一没有给出的信息,它很容易制作,你只需要知道年份是否是闰年。这也可以通过以下步骤轻松确定:
如果年份可以被4整除,请转至步骤2。否则,转至步骤5
如果年份可以被100整除,请转至步骤3。否则,转至步骤4
如果年份可以被400整除,请转至步骤4。否则,转至步骤5
这一年是闰年(有366天)
这一年不是闰年(它有365天)
或者在代码中
if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
如果“年”是闰年,则返回true。
Tøndering算法的表格式先驱体现在以下K&R C函数中。[10]稍作改动,它可适用于其他高级编程语言,如APL2。[11](也有6502汇编语言版本),由坂本智彦于1993年在comp.lang.C Usenet新闻组上发布,它适用于任何公历日期:
//js
函数dayofweek(y、m、d)
{
t=[0,3,2,5,0,3,5,1,4,6,2,4];
y-=m<3;
返回数学楼层(y+y/4-y/100+y/400+t[m-1]+d)%7;
}
该函数并不总是保留y,并返回0=Sunday、1=Sunday等。相反,下面的表达式
请考虑添加一些描述来帮助OP理解代码意味着什么。不幸的是,我的代码不起作用。我有以下错误:不兼容的类型:int无法转换为java.lang.stringChange此行:return(lastTwoDigits+LastTwoDigitsDiv12+LastTwoDigitsRequires+LastTwoDigitsRemainderDiv4+day+month)%finalMod代码>到此行:返回整数.toString(返回(lastTwoDigits+LastTwoDigitsDiv12+LastTwoDigitsRequires+LastTwoDigitsRemainderDiv4+day+month)%finalMod)代码>我编辑了我的帖子以包含对您错误的修复。如果添加您的字符串,编译器将返回以下内容:表达式的非法开始..可能有效:返回Integer.toString(lastTwoDigits+LastTwoDigitsDiv12+lastTwoDigitsRemainder+lastTwoDigitsRemainderDivFour+day+month)%finalMod);
if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
//js
function dayofweek(y, m, d)
{
t= [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4];
y -= m < 3;
return Math.floor(y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}