該篇文章主要是對DelphiXE8的System.DateUtils單元中This of that functions部分的函數進行調用示例及說明,若有不對之處還望你們能夠提出,本人予以改正!算法
其實以前對於DayOfTheWeek函數中的計算公式,爲什麼要先對日期參數-1,而後再取模,最後對結果+1一直都沒有理解,源碼中的解釋也不過是我經過測試獲得的一個可能的結論而已。後來我在找參考資料的過程當中發現了一段話,對我啓發很大。函數
差很少全部星期算法的基礎皆可概括以下:測試
從一個已知的日子做爲起始日,通常採用世紀的第一天,經過同餘7計算共過去了多少天。如將一週日子由0至6計算,結果將爲一餘數,如使用1至7計算,則7將代替0。spa
查表或使用已知規則計算上面的起始日,即該世紀開始的星期數。.net
查表或使用已知規則計算該年份開始的星期數。code
計算該月份開始的星期數。orm
從該月份開始的計算該日的星期數。ip
簡單來講,使用同餘7表示在計算中可剔除7的倍數,如此可把7看成0、8看成一、9看成二、18看成4,如此類推。若是把星期日看成第0日,7往後(第7日)亦是星期日,而第18日則會與第4日相同,爲星期往後的4天,即星期四。一些算法把全部加數先行計算,而後把7的倍數剔除,而其餘算法則在每一步皆剔除7的倍數。兩種作法皆可取,第一種作法較適用於計算機及電腦算法中,其餘則較適用於心算。這些計算在熟習後,可在腦內計算出來。get
看到以上的解釋,我想其實咱們調用該函數的時候也能夠不先-1,最後再+1,只不過這樣獲得的結果0表明週日,其餘無變化。這樣的話不符合咱們的平常習慣,大部分國家仍是習慣用1-7來表明一週,而非0-6來表明一週的。
具體內容請你們移步至源碼示例