TDateTime 日期時間值的比較

2021-08-28 08:51:09 字數 1711 閱讀 7659

程式設計中,對日期型別tdatetime、tdate、ttime之間的比較和判斷,很是棘手。依據本人經驗,寫了乙個比較函式,使用中比較上手。說明如下:

1、時間tdatetime相當於是double,即雙精度數64位,它用11位表示e,53位表示精度(整數小數一起),最前面一位表示正負。

2、tdatetime的整數部分:1天=1,標準日期值,0表示公元1899-12-30,當整數部分大於0,由標準日期累加天數,小於0由由標準日期累加天數。

3、小數部分:1/1000秒=0.00000001,0 表示一天的 00:00:00 000。通過累加0.00000001計數毫秒,遞加時分秒。

4、比較兩個時間值,檢測二值相等,只要二時間差的絕對值<0.00000001即可。這個值如果精確範圍,應該是0

函式定義如下:

function datatimecompare(d1,d2:tdatetime):integer;  // 0等於 1大於 -1小於

var k:double;

begin

result:=0;

k:=abs(d1-d2);

if (k>=0) and (k<0.0000000099999999) then result:=0

else begin

if (d1-d2)>=0 then result:=1

else result:=-1;

end;

end;

引數tdatetime型別,同時tdate和time,均可使用。

procedure tform1.button1click(sender: tobject);

var mydate1,mydate2,mydate3,mydate4: tdatetime;

t1,t2:ttime;

begin

t1 := encodetime(0, 0, 0, 0);

t2 := encodetime(0, 0, 0, 1);

mydate1 := encodedatetime(2018, 10, 1, 0, 0, 0, 0);

mydate2 := encodedatetime(2018, 10, 1, 0, 0, 0, 1);

mydate3 := encodedatetime(2018, 10, 1, 0, 0, 0, 2);

edit1.text:=format('%.8f', [mydate1]);

edit2.text:=format('%.8f', [mydate2]);

edit3.text:=format('%.8f', [mydate3]);

showmessage(inttostr(datatimecompare(mydate1,mydate1)));

showmessage(inttostr(datatimecompare(mydate2,mydate1)));

showmessage(inttostr(datatimecompare(mydate1,mydate2)));

}showmessage(inttostr(datatimecompare(t2,t2)));

showmessage(inttostr(datatimecompare(t1,t2)));

showmessage(inttostr(datatimecompare(t2,t1)));

end;

注意單元中,加入uses dateutils,

delphi中日期型別TDateTime使用總結

剛才真正明白了delphi中的tdatetime型別,實際上為乙個浮點數,因此tdatetime型別的兩個變數可以進行浮點數的大部分操作,對於小數部分可以使用minuteof輸出它的分鐘數,負小數取補後轉化為分鐘數。並且可以通過tdatetimetostr,strtodatetime可以方便與str...

TDateTime轉UTC的時間差

需求 返回用分鐘表示的主計算機上的時間和全球標準時間 utc 之間的時間差,如 2010 01 10 09 07 54,與utc之間的時間差應為 1263085674.呼叫方法 gettimezoneoffset strtodatetime 2010 01 10 09 07 54 實現 功能 獲取本...

日期時間的操作

有這麼個場景 訂購了乙個產品,有開始時間,然後有訂購週期,以小時為單位。需要計算出產品的結束時間,寫入賬單中。產品的結束時間就是為開始時間加上訂購租期,算出結束時間。本來這個應該是前台做的事情。我們直接去獲取就可以了。最後se決定還是在寫話單前進行計算。以下是程式 有用的同學可以把它做成更通用。滿足...