當我試圖瞭解Sakamoto's algorithm查找給定日期時,出現此問題。查找給定年份開始的日期
我發現算法的工作是很難理解,甚至閱讀下面的 Stackoverflow answer
所以,我決定先解決調查在某一年開始之日(一月-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以獲得正確的日期或者我的程序在邏輯上是不正確的?
最後,我用 TimeAndDate網站的日計算器工具和「1/1/0001」星期六開始。
我的最後一個問題是
3)公曆在哪一天開始?
對這些問題的任何提示都非常感謝。
謝謝,
我做它作爲一個學習的過程,理解屏幕背後發生了什麼。而且,我的問題不是特定於任何特定的語言,而是算法本身。 – Balasubramanian