如何创建一个算法,在不使用java.util.Calendar的情况下返回给定日期中的字符串DayOfWeek

如何创建一个算法,在不使用java.util.Calendar的情况下返回给定日期中的字符串DayOfWeek,java,algorithm,Java,Algorithm,我试图写一个算法,让我能够确定一个给定日期是一周中的哪一天。我在互联网上看到我可以导入java.util.calendar,但不幸的是我不允许使用它;相反,我必须自己创建算法。 这是我到目前为止写的,但不幸的是它不起作用。有什么想法吗? 谢谢 我相信您的代码可能会起作用,如果您只做以下细微更改: 更改此行: return(lastwodights+lastwodigitsdiv12+lastwodigitsliments+lastwodigitslimentsdivfour+day+month)

我试图写一个算法,让我能够确定一个给定日期是一周中的哪一天。我在互联网上看到我可以导入java.util.calendar,但不幸的是我不允许使用它;相反,我必须自己创建算法。 这是我到目前为止写的,但不幸的是它不起作用。有什么想法吗? 谢谢


我相信您的代码可能会起作用,如果您只做以下细微更改:

更改此行:

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;
        }