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

strtodatetime與MinutesBetween問題

答題得分者是:william
isthatu
初階會員


發表:80
回覆:47
積分:25
註冊:2002-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-21 10:12:43 IP:211.21.xxx.xxx 未訂閱
最近使用這兩個函數 計算時間差 出現一個奇怪的問題 我的日期 時間 分別型態為string 利用 MinutesBetween( strtodatetime('2003/10/10 10:00:00:000') ,strtodatetime('2003/10/10 10:02:00:000') ) 求兩字串分鐘差 其結果在大量資料進來時 總有幾組的分鐘差會差1分鐘 因為MinutesBetween函數 在 9:00:00 AM and 9:00:59:999 AM 分鐘差為0 我在想是不是strtodatetime這函數在轉datetime過程中的誤差而導致這一分鐘的差異 如是 又該怎麼 strtodatetime 求取更精確的時間轉換 有更精確的字串轉日期的函數嗎 BCDEFHIJKLMNOPQRSTUVWXZ
------
BCDEFHIJKLMNOPQRSTUVWXZ
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-21 10:35:35 IP:147.8.xxx.xxx 未訂閱
In DateUtils:    
function MinutesBetween(const ANow, AThen: TDateTime): Int64;
begin
  Result := Trunc(MinuteSpan(ANow, AThen));
end;
so you could use round(MinuteSpan(Time1,Time2)); or could the function ceil be better?
isthatu
初階會員


發表:80
回覆:47
積分:25
註冊:2002-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-21 13:15:10 IP:211.21.xxx.xxx 未訂閱
引言: In DateUtils:
function MinutesBetween(const ANow, AThen: TDateTime): Int64;
begin
  Result := Trunc(MinuteSpan(ANow, AThen));
end;
so you could use round(MinuteSpan(Time1,Time2)); or could the function ceil be better? 型態不符合 Double又要怎麼轉成Extended?? MinuteSpan(const ANow, AThen: TDateTime): Double Round(X: Extended): Int64;
BCDEFHIJKLMNOPQRSTUVWXZ
------
BCDEFHIJKLMNOPQRSTUVWXZ
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-21 13:38:23 IP:147.8.xxx.xxx 未訂閱
double (8 bytes) to extended (10 bytes) conversion should be automatically done by the compiler....
isthatu
初階會員


發表:80
回覆:47
積分:25
註冊:2002-06-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-21 13:47:19 IP:210.192.xxx.xxx 未訂閱
引言: double (8 bytes) to extended (10 bytes) conversion should be automatically done by the compiler....
function MinutesBetween(const ANow, AThen: TDateTime): Int64; begin Result := Trunc(ROUND((MinuteSpan(ANow, AThen))); 改成這樣compiler不過不去 end; 後來只好再改 function MinutesBetween(const ANow, AThen: TDateTime): Int64; var A:extended; begin A:= MinuteSpan(ANow, AThen); if A=Trunc(A) then Result := Trunc(A) else Result :=Trunc(A) 1; end; 目前正在測試....好像就不會有差一分鐘的問題了 ANYWAY TKX! BCDEFHIJKLMNOPQRSTUVWXZ
------
BCDEFHIJKLMNOPQRSTUVWXZ
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-21 14:08:21 IP:147.8.xxx.xxx 未訂閱
> < class="code">function MyMinutesBetween(const ANow, AThen: TDateTime): integer; begin Result := round((MinuteSpan(ANow, AThen)); end; or function MyMinutesBetween(const ANow, AThen: TDateTime): integer; begin Result := ceil((MinuteSpan(ANow, AThen)); end;
系統時間:2024-05-10 20:15:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!