7

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

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

4

3 回答 3

10

使用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);
于 2013-05-20T22:29:07.963 回答
5

肯定有,至少在最近的版本中 - 请参阅DateUtils单元,尤其是所有Recode*例程和EncodeDateTime. 该DateUtils单元已经在 Delphi 2010 中可用,甚至可能在早期版本中。

于 2013-05-20T22:12:52.160 回答
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));
于 2013-05-21T14:06:33.673 回答