找到特定年份开始的那一天

时间:2014-05-21 10:11:14

标签: algorithm date

当我试图理解Sakamoto's algorithm找到某个特定日期的日期时,就出现了这个问题。

我发现即使在阅读了以下 Stackoverflow answer 后,算法的工作也难以理解

所以,我决定首先解决一个特定的问题,即找到某一年开始的日子(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”我的节目返回星期日,而Sakamoto的星期一返回。

所以,

1)这是否意味着公历是在星期一而不是星期日开始的?

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

最后,我使用 TimeAndDate 网站日计算器工具,并在星期六开始使用“1/1/0001”。

我的最后一个问题是

3)格里高利历在哪一天开始?

非常感谢对这些问题的任何启发。

谢谢,

1 个答案:

答案 0 :(得分:0)

重新发明轮子究竟是什么意思?

Joda-Time是Java中日期时间操作的事实标准,它为dayOfWeek个对象提供DateTime方法。参见例如http://joda-time.sourceforge.net/userguide.html#Querying_DateTimes

如果您仍然对如何正确计算的详细信息感兴趣,请参阅https://github.com/JodaOrg/joda-time/blob/master/src/main/java/org/joda/time/chrono/BasicChronology.java#L538