程式設計中,對日期型別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決定還是在寫話單前進行計算。以下是程式 有用的同學可以把它做成更通用。滿足...