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;

结果当然是不相等。

~谢谢打赏~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值