【发布时间】:2014-05-21 10:11:14
【问题描述】:
当我试图理解 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”,它返回星期日。
为了验证它的正确性,我实现了坂本算法并比较了结果,我的程序的结果似乎总是在坂本算法返回的前一天。
对于日期“0001 年 1 月 1 日”,我的程序周日返回,而 Sakamoto 的程序周一返回。
所以,
1) 这是否意味着公历从星期一而不是星期日开始?
2) 如果是,是否意味着我应该在结果中加 1 才能获得正确的日期,还是我的程序在逻辑上不正确?
最后,我使用了 TimeAndDate 网站的日期计算器工具,“1/1/0001”从星期六开始。
我的最后一个问题是
3) 公历从哪一天开始?
非常感谢您对这些问题的任何了解。
谢谢,
【问题讨论】: