2014-05-21 26 views
0

當我試圖瞭解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)公曆在哪一天開始?

對這些問題的任何提示都非常感謝。

謝謝,

回答

0

究竟是重新發明車輪的重點?

Joda-Time是Java中日期時間操作的事實標準,它爲DateTime對象提供了dayOfWeek方法。見例如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

+0

我做它作爲一個學習的過程,理解屏幕背後發生了什麼。而且,我的問題不是特定於任何特定的語言,而是算法本身。 – Balasubramanian

相關問題