将时间添加到TDateTime

时间:2013-05-20 22:08:50

标签: delphi

我想在TDateTime变量中添加秒数,以便结果是分钟的最高点。例如,如果是08:30:25,我想将TDateTime变量更改为存储08:31:00。

我看到TDateTime有一个Decode函数,我可以使用它。但是,没有一个编码函数可以将更改的时间放回到TDateTime变量中。

3 个答案:

答案 0 :(得分:7)

使用DateUtils可以这样做:

Uses
  DateUtils;

var
  Seconds : Word;    

Seconds := SecondOfTheMinute(MyTime);  // Seconds from last whole minute
// Seconds := SecondOf(MyTime); is equivalent to SecondOfTheMinute()
if (Seconds > 0) then
  MyTime := IncSecond(MyTime,60 - Seconds);

答案 1 :(得分:5)

确定,至少在最近的版本中,请参阅DateUtils单元,尤其是所有Recode*例程和EncodeDateTimeDateUtils单元已在Delphi 2010中提供,甚至可能在早期版本中可用。

答案 2 :(得分:0)

理论

TDateTime数据类型表示自1899年12月30日以来的天数作为实数。也就是说,TDateTime的整数部分是整天的数量,而小数部分代表一天中的某个时间。

实践

因此,您可以使用简单的算术解决您的问题:

var
  Days: TDateTime;
  Mins: Extended;  { widen TDateTime's mantissa by 11 bits to accommodate division error } 

begin
  Days := Date + StrToTime('08:30:25');
  Writeln(DateTimeToStr(Days));


  Mins := Days * 24 * 60 ;  // compute minutes
  Mins := Math.Ceil(Mins);  // round them up
  Days := Mins / (24 * 60); // and back to days
  { or as simple and concise expression as: }
  // Days := Ceil(Days * MinsPerDay) / MinsPerDay;

  Writeln(DateTimeToStr(Days));