全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2643
推到 Plurk!
推到 Facebook!

關於使用TDateTime計算起始時間與終止時間的問題

答題得分者是:gac
szj
一般會員


發表:7
回覆:6
積分:2
註冊:2006-09-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-24 16:46:50 IP:203.204.xxx.xxx 訂閱

假設有輸入兩個 TDateTime 變數 ( Start, End)

ex: start 為 2006/01/01
end 為 2007/01/01

請問是否有函式可以列出中間經過的日期

Output:
2006/01/01
2006/01/02
2006/01/03
...
...
2007/01/01

我知道可以用
DecodeDate(Start->DateTime, StartYear, StartMonth, StartDay);
的方式取出 Year, Month, Day。
但是卻不曉得有什麼方法可以一天一天的增加
有想過 StartDay =1 來累加,但是又需要考慮 Month 可能有28,30,31天數不同,
每4年又會潤2/29,
不曉得有什麼解決的方法,還是說只能自己來計算...


請問是否有人能給我一點意見....謝謝


編輯記錄
taishyang 重新編輯於 2007-04-25 14:47:25, 註解 將文章分類成[問題]‧
ivljoe
一般會員


發表:3
回覆:5
積分:1
註冊:2007-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-24 17:16:49 IP:60.51.xxx.xxx 訂閱
沒錯, 可以用 start+=1 來做, 而不是 StartDay




編輯記錄
ivljoe 重新編輯於 2007-04-24 17:18:39, 註解 無‧
ivljoe 重新編輯於 2007-04-24 17:20:05, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-24 18:54:16 IP:211.22.xxx.xxx 未訂閱
#include < DateUtils.hpp >

//裡面有很多日期演算的VCL函數,可以開啟BCB線上說明來查看一下~
extern PACKAGE System::TDateTime __fastcall IncDay(const System::TDateTime AValue, constint ANumberOfDays = 0x1);
編輯記錄
Stallion 重新編輯於 2007-04-24 21:11:56, 註解 無‧
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-24 19:38:46 IP:219.133.xxx.xxx 未訂閱
直接用StartDay =1就行了,你不用担心每个月的天数不同以及闰年等问题。加之前判断有没有到达EndDay就OK了
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
szj
一般會員


發表:7
回覆:6
積分:2
註冊:2006-09-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-25 16:21:13 IP:203.204.xxx.xxx 訂閱
感謝各位的幫忙,沒想到其實 TDateTime 可以直接拿來作比較。
可以利用類似以下程式碼來做...

while ( StartDate != EndDate ){
sprintf(msg, "%s", StartDate.DateString());
Memo1->Lines->Add(msg);
StartDate =1;
}

謝謝大家的意見..
gac
初階會員


發表:2
回覆:28
積分:26
註冊:2004-08-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-25 22:06:41 IP:218.167.xxx.xxx 未訂閱
在BCB裡對 "TDateTime" 按滑鼠右鍵 "Find Declaration",

class RTL_DELPHIRETURN TDateTimeBase
{
public:
doubleVal;
};

其實 TDataTime 就是一個 double 的值,
按 [F1] 查看 TDateTime 的說明也可以看到,
"The integral part of a TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of a TDateTime value is the time of day."
整數部分是由 1899/12/30 開始算的 "天數" - 日期,
小數部分則是 - 時間,
所以對 TDateTime 1 就是日期加一天,
要加一個小時則是 TDateTime double( 1.0 / 24.0 ),
加一個分鐘則是 TDateTime double( 1.0 / 24.0 / 60.0 ) ..... 依此類推,
有這些觀念,對於 TDateTime 時間的計算會有幫助的。
------
我..........還很嫩!
系統時間:2024-05-08 3:39:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!