如何用DELPHI更改系统日期?请给出示例!(100分)

  • 主题发起人 主题发起人 hylwy
  • 开始时间 开始时间
H

hylwy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用DELPHI更改系统日期?请给出示例!
 
Please tray this !

var
MyST:TSystemTime;
begin
with MyST do
begin
wYear:=1999;
wMonth:=6;
wDay:=5;
wHour:=3;
wMinute:=10;
wSecond:=20;
end;
SetSystemTime(MyST);
end;

Good luck!
 
临时写一个函数给你, 已测试,没问题
function SetSystemtime(ATime: TDateTime) : boolean;
Var
ADateTime:TSystemTime;
yy,mon,dd,hh,min,ss,ms : Word;
Begin
decodedate(ATime ,yy,mon,dd);
decodetime(ATime ,hh,min,ss,ms);
With ADateTime Do
Begin
wYear:=yy;
wMonth:=mon;
wDay:=dd;
wHour:=hh;
wMinute:=min;
wSecond:=ss;
wMilliseconds:=ms;
End;
Result:=SetLocalTime(ADateTime);
SendMessage(HWND_BROADCAST,WM_TIMECHANGE,0,0)
If Result then ShowMessage('成功改变时间!');
End;
 
????????
发个邮件的工夫, 回答就落后了10分钟。

哈哈, 不过dreamsoft 的答案是不对的
东西要学透才好,还是我的正确!

落后10分钟,但得之于 一毫秒
 
mr.王,你好。为什么dreamsoft的程序会设置错误的时间?
另,你的程序用tdatetime设置时间好象不太直观。
 
function SetPCSystemTime(tDati: TDateTime): Boolean;
var
tSetDati: TDateTime;
vDatiBias: Variant;
tTZI: TTimeZoneInformation;
tST: TSystemTime;begin
GetTimeZoneInformation(tTZI);
vDatiBias := tTZI.Bias / 1440;
tSetDati := tDati + vDatiBias;
with tST do
begin
wYear := StrToInt(FormatDateTime('yyyy', tSetDati));
wMonth := StrToInt(FormatDateTime('mm', tSetDati));
wDay := StrToInt(FormatDateTime('dd', tSetDati));
wHour := StrToInt(FormatDateTime('hh', tSetDati));
wMinute := StrToInt(FormatDateTime('nn', tSetDati));
wSecond := StrToInt(FormatDateTime('ss', tSetDati));
wMilliseconds := 0;
end;
SetPCSystemTime := SetSystemTime(tST);
end;
 
to hylwy:
hehe, 俺自认为调用方法已经很简单很方便
so easy, 比如 SetSystemTime( StrTodateTime('1999-05-08') );
参数给的是tDateTime 更符合DELPHI 风格

dreamsoft 的问题是在它给出的调用方法里少了对 毫秒参数的设置
所以调用不会成功
不知道为什么,在网络里好几个地方的TIPS里关于这个 设定时间的函数
都少了毫秒参数的设置,这不知这些网页的作者自己是否实验过
比如下面这个连接
http://www.netease.com/~rlsoft/gooddp1.htm
 
王寒松:
能否解释一下
Result:=SetLocalTime(ADateTime);
SendMessage(HWND_BROADCAST,WM_TIMECHANGE,0,0);
语句的作用及各参数的含义如何?听君一席话胜读十年书啊!:-)
 
SetLocalTime 在WIN API帮助里可以找到
SendMessage(HWND_BROADCAST,WM_TIMECHANGE,0,0)
是在改变时间后将时间改变的时间广播统治到当前运行各进程里
 
听你的理解与感受,听你介绍比看书强,俗话说:
听君一席话胜读十年书啊!:-)
 
王寒松及yifeng的方法都可以达到目的,我只好把分数一分为二来答谢两位了!
 
多人接受答案了。
 
后退
顶部