拜託幫一下~用delphi7寫的萬年曆 |
尚未結案
|
mingood
一般會員 發表:2 回覆:11 積分:2 註冊:2005-03-24 發送簡訊給我 |
真ㄉ寫不出來捏~有誰能幫我一下~
我找到ㄉ資料是要找一天當基準
然後算出與基準差幾天mod 7
餘0就是禮拜日,餘1禮拜一,...
"年份能被4整除但不被100整除"以及"能被400整除"~這兩種為閏年
閏年2月29天~平年28天~所以閏年366天~平年365天
年跟月由使用者輸入~因該是用兩ㄍEDIT吧 我有找到一篇"n/a"大大ㄉ回應文
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25433
先確定怎麼算日子就行,
每月有幾天就用大月小月,配合閏年檢查,譬如,(以下是虛擬碼)
if month = 2 then
if ((year mod 4 = 0) or (year mod 400 = 0)) and (year mod 100 != 0) then
days := 29
else
days := 28
end if
else if (month = 4) or (month = 6) or (month = 9) or (month = 11) then
days := 30
else
days := 31
end if
然後,再借用2003年1月1日星期3當做基準,
2003年3月1日是星期幾? 答案是,經過上述if-else式子換算,
2003年1月有31天,2003年2月有28天,共為59天,59除7餘3,
所以2003年3月1日的星期數,是2003年1月1日的星期數加3(再除7餘6),為星期6.
知道這一天是星期6了,就很容易印出2003年3月1日的月曆. 有誰能夠幫我想一下QQ
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
|
mingood
一般會員 發表:2 回覆:11 積分:2 註冊:2005-03-24 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
首先,你先決定好要用誰做基準
例如你這裡是用 2003/1/1 星期三為例 現在是 2005/3/29 是星期幾呢?
只要算出今天跟 2003/1/1 隔幾天就行了
實際上有比較快的算法
已知一年有 365 天,365 除以 7 餘 1
可得知每隔一天,星期會加一,隔二年即加二
不過,閏年有 366 天,也就是星期會加二,不過,原本已經先加一了
所以你只要算出有幾個閏年,再算上去就行了
2005/1/1 ~ 2003/1/1 只有 2004 是閏年,所以再加一
所以,2005/1/1 就是星期六了 再來算,2005/3/1 星期幾
中間隔了二個月,把一月/二月的天數加上去
6 31 28 = 65 除以 7 餘 2(星期二) 好啦,進行到這個步驟,你已經可以把2005/03的月曆印出來囉
其中,只有算區間閏年比較麻煩一點,不過,你可以用好算的參考年來簡化
例如: 2000/1/1 之類的
記得中間好像有某一年某月少了幾週,這個地方要留意
詳細的年份不太記得了,大抵是 19xx 年左右,所以... 以 2000 以後的為參考吧
|
mingood
一般會員 發表:2 回覆:11 積分:2 註冊:2005-03-24 發送簡訊給我 |
引言: 首先,你先決定好要用誰做基準 例如你這裡是用 2003/1/1 星期三為例 現在是 2005/3/29 是星期幾呢? 只要算出今天跟 2003/1/1 隔幾天就行了 實際上有比較快的算法 已知一年有 365 天,365 除以 7 餘 1 可得知每隔一天,星期會加一,隔二年即加二 不過,閏年有 366 天,也就是星期會加二,不過,原本已經先加一了 所以你只要算出有幾個閏年,再算上去就行了 2005/1/1 ~ 2003/1/1 只有 2004 是閏年,所以再加一 所以,2005/1/1 就是星期六了 再來算,2005/3/1 星期幾 中間隔了二個月,把一月/二月的天數加上去 6 31 28 = 65 除以 7 餘 2(星期二) 好啦,進行到這個步驟,你已經可以把2005/03的月曆印出來囉 其中,只有算區間閏年比較麻煩一點,不過,你可以用好算的參考年來簡化 例如: 2000/1/1 之類的 記得中間好像有某一年某月少了幾週,這個地方要留意 詳細的年份不太記得了,大抵是 19xx 年左右,所以... 以 2000 以後的為參考吧 引言: 首先,你先決定好要用誰做基準 例如你這裡是用 2003/1/1 星期三為例 現在是 2005/3/29 是星期幾呢? 只要算出今天跟 2003/1/1 隔幾天就行了 實際上有比較快的算法 已知一年有 365 天,365 除以 7 餘 1 可得知每隔一天,星期會加一,隔二年即加二 不過,閏年有 366 天,也就是星期會加二,不過,原本已經先加一了 所以你只要算出有幾個閏年,再算上去就行了 2005/1/1 ~ 2003/1/1 只有 2004 是閏年,所以再加一 所以,2005/1/1 就是星期六了 再來算,2005/3/1 星期幾 中間隔了二個月,把一月/二月的天數加上去 6 31 28 = 65 除以 7 餘 2(星期二) 好啦,進行到這個步驟,你已經可以把2005/03的月曆印出來囉 其中,只有算區間閏年比較麻煩一點,不過,你可以用好算的參考年來簡化 例如: 2000/1/1 之類的 記得中間好像有某一年某月少了幾週,這個地方要留意 詳細的年份不太記得了,大抵是 19xx 年左右,所以... 以 2000 以後的為參考吧嗚嗚~我就是卡在不知道要怎ㄇ定基準天~還有差幾天要怎ㄇ算QQ |
mingood
一般會員 發表:2 回覆:11 積分:2 註冊:2005-03-24 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
mingood
一般會員 發表:2 回覆:11 積分:2 註冊:2005-03-24 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 日子的算法跟閏月的判別我都差不多會了~ 但是我要抓一天作基準日的寫法要怎麼寫阿??用 EncodeDate 試試: var dt: TDateTime; begin // 三個參數分別傳入 年、月、日 dt := EncodeDate(2005, 4, 5); end; 引言: 還有使用者輸入的日期跟我的基準日共插幾天又要怎麼寫阿QQ 有能人幫我一下嗎??假設使用者輸入日期為 2005/4/5 基準日期為 1950/1/1 兩者相差天數算法如下: var dtStandard, dtInput: TDatetime; iDays: integer; // 相差天數 begin dtStandard := EncodeDate(1950, 1, 1); dtInput := EncodeDate(2005, 4, 5); if dtInput >= dtStandard then iDays := Trunc(dtInput - dtStandard) else iDays := Trunc(dtStnadard - dtInput); end;-- 分擔可以輕省, 分享帶來喜樂! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |