如何精确的倒推时间?详细请看内容!(50分)

  • 主题发起人 主题发起人 狼牙
  • 开始时间 开始时间

狼牙

Unregistered / Unconfirmed
GUEST, unregistred user!
如何精确的倒推时间?设定精确的往后倒退,比如我要倒退50天,然后设定系统时间为
倒退后的时间?
 
用当前的系统日期-50,就是50天前的日期,时间当然还是现在的时间。[:D]
 
在Delphi中,时间是一个浮点数,TDateTime值的整数部分为自从12/30/1899以来的天数,
其小数部分为天的时间。知道了时间的表示方法,再运算时间,就很简单了.
  
 
当前时间每秒减 计数器*2
 
用程序直接修改系统时间
 
d6中也有相关函数
 
uses DateUtils;

后退50天可以这样写;
var myDate:TDateTime;
begin
myDate:=incday(now,-50));
//myDate就是你要得到的倒退50天的TDateTime,
end;

另外还有IncHour(),IncMonth(),IncYear都可以用,可以去查查帮助,不过要记得uses DateUtils;
设置系统时间可以用 SetSystemTime();不过里面的参数要转换一下
 
如果只精确到天的话直接减就成了。会自动算出相应的日期。
 
var
t: TDatetime;
st: _SystemTime;
begin
t := now - 50;//得到当前倒退50天的时间
DatetimeToSystemTime(t,st);//转换时间格式
SetLocalTime(st);//设置当前时间
 
我在程序中调试了一下:

procedure BackDate();
var
myTime:SYSTEMTIME;
myDate:TDateTime;
begin
MyDate:=incday(now,-50);
DateTimeToSystemTime(myDate,myTime);
SetSystemTime(myTime);
end;
 
请教SetSystemTime和SetLocalTime有何区别?
顺便更正一下,如果使用SetSystmeTime是无法实现时间精确递减和递增。
换为SetLocalTime就可以,贴出代码,请指正。
procedure TForm1.Button1Click(Sender: TObject);
var
myTime:SYSTEMTIME;
begin
incdate(1);
GetLocalTime(myTime);
memo1.lines.Add(datetimetostr(SystemTimeToDateTime(mytime)));
end;

procedure TForm1.incDate(num:integer);
var
myTime:SYSTEMTIME;
myDate:TDateTime;
begin
MyDate:=incday(now,num);
DateTimeToSystemTime(myDate,myTime);
SetLocalTime(myTime);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
myTime:SYSTEMTIME;
begin
incdate(-1);
GetLocalTime(myTime);
memo1.lines.Add(datetimetostr(SystemTimeToDateTime(mytime)));
end;
 
关注:SetSystemTime和SetLocalTime的区别...
我也是为了你这个问题才查到SetSystemTime的,不知道有何不妥

你说的:“顺便更正一下,如果使用SetSystmeTime是无法实现时间精确递减和递增。”

可我自己机器上确实已经实现了倒退50天,就是用我给你的代码啊,
而且应该是 SetSystmeTime和IncDay()一起用才实现的,先用Incday得到倒退50天的TdateTime日期。
然后用SetSystmeTime将它设置成系统时间

 
接受答案了.
 
后退
顶部