date time 分开存储如何合并_关于TDateTime的TDate与TTime合并的问题 | 菲菲的家
遇到TDate與TTime合并為TDateTime的問題,想想應該很容易,沒想到發現一個百思不得其解的問題,在這里跟大家分享并求教。
比如有兩個組件DateTimePicker1和DateTimePicker2,Kind屬性分別為dtkDate和dtkTime,一個用來定義TDate值,一個用來定義TTime值,現在要將TDate與TTime合并為TDateTime,我首先想到的方法是以下語句:
NewDateTime: TDateTime;
...
NewDateTime := Int(DateTimePicker1.Date) + Frac(DateTimePicker2.Time);
應該一句話解決問題的,但偏偏就出了問題,最終對NewDateTime的處理結果不對,可是調試將鼠標停在上述語句的NewDateTime上,明明結果正是DateTimePicker1.Date與DateTimePicker2.Time的字符串之和,很是奇怪。
于是,我有采用了另一種迂回方法達到目的,即以下語句:
NewDateTime: TDateTime;
NewDateTimeStr: string;
...
NewDateTimeStr := DateToStr(DateTimePicker1.Date)+' '+ TimeToStr(DateTimePicker2.Time);
NewDateTime := StrToDateTime(NewDateTimeStr);
這次調試將鼠標停在上述語句的NewDateTime上,結果跟第一次的結果一樣,都是DateTimePicker1.Date與DateTimePicker2.Time的字符串之和,但最終結果表明,這次的NewDateTime正確。
我對上述問題百思不得其解,雖最終用第2種方法達到了目的,但不明所以,在這里本人虛心請教,還望知道怎么回事的朋友告知。本人使用的是XE2?With Update 4 Hotfix 1。
以下代碼證明了上述兩種方法得到的不一樣TDateTime的結果:
放入兩個組件DateTimePicker1和DateTimePicker2,Kind屬性分別為dtkDate和dtkTime;放入一個按鈕,按鈕的OnClick代碼為:
procedure TForm1.Button1Click(Sender: TObject);
var
NewDateTimeStr: string;
NewDateTime1, NewDateTime2: TDateTime;
begin
//這樣就錯誤
NewDateTime1 := Int(DateTimePicker1.Date) + Frac(DateTimePicker2.Time);
//這樣就正確
NewDateTimeStr := DateToStr(DateTimePicker1.Date)+' '+TimeToStr(DateTimePicker2.Time);
NewDateTime2 := StrToDateTime(NewDateTimeStr);
if NewDateTime1 = NewDateTime2 then
ShowMessage('相等')
else
ShowMessage('不相等')
end;
結果當然是不相等。
~謝謝打賞~
賞
總結
以上是生活随笔為你收集整理的date time 分开存储如何合并_关于TDateTime的TDate与TTime合并的问题 | 菲菲的家的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二分+思维点点之间最大距离
- 下一篇: 工作族必备的备忘录时间管理APP软件