Algorithm 查找给定年份开始的日期

Algorithm 查找给定年份开始的日期,algorithm,date,Algorithm,Date,这个问题是在我试图理解如何找到某个日期的哪一天时出现的 我发现,即使在阅读了以下内容后,算法的工作原理也很难理解 因此,我决定首先解决一个特定的问题,即找到一年的开始日期(1月1日) 根据Sakamoto的算法,我只是加入了闰年和非闰年的额外天数。 我的代码如下: public String getDay(String date) { String[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Fr

这个问题是在我试图理解如何找到某个日期的哪一天时出现的

我发现,即使在阅读了以下内容后,算法的工作原理也很难理解

因此,我决定首先解决一个特定的问题,即找到一年的开始日期(1月1日)

根据Sakamoto的算法,我只是加入了闰年和非闰年的额外天数。 我的代码如下:

public String getDay(String date)
{
    String[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };

    int day = Integer.parseInt(date.split("/")[0]);
    int month = Integer.parseInt(date.split("/")[1]);
    int year = Integer.parseInt(date.split("/")[2]);

    year--;     // to calculate the additional days till the previous year

    int dayOfTheWeek = (year + year/4 - year/100 + year/400) % 7;

    return days[dayOfTheWeek];
}
因此,对于日期“1/1/0001”,它返回周日

为了验证它的正确性,我实现了Sakamoto算法并比较了结果,我的程序的结果似乎总是比Sakamoto算法返回的结果早一天

对于日期“1/1/0001”,我的节目周日返回,而坂本的节目周一返回

所以

1) 这是否意味着公历从星期一开始而不是星期天

2) 如果是,这是否意味着我应该在结果中添加1以获得正确的日期,或者我的程序在逻辑上不正确

最后,我使用了站点的日计算器工具,“1/1/0001”从周六开始

我的最后一个问题是

3) 公历从哪一天开始

非常感谢您对这些问题的解答


谢谢,

重新发明轮子到底有什么意义

Joda Time是Java中日期时间操作的事实标准,它为其
DateTime
对象提供了
dayOfWeek
方法。见例


如果您仍然对如何正确计算的细节感兴趣,请参见

我将此作为学习练习,以了解屏幕后面发生的情况。此外,我的问题不是针对任何特定的语言,而是关于算法本身。