2023年11月30日发(作者:)
本地时间与Web标准时间校对
操作系统时间与Web标准时间校正
⼀、获取标准时间的意义
我们在编程时,对于数据的核准,需要与⽇期时间值,作为校准参数。因此,客户端时间要与服务器时间⼀致,将它们的时间与标准
时间⼀致,是最好的办法。通过访问⽹站:,可以获取标准⽇期时间字符串,再对本地操作系统,进⾏时间同步操作。
使⽤Delphi的Indy组件中的TidDayTime控件,再做好⽇期时间值 的分解。⽅便实⽤,本程序同时,也是我们⽇常使⽤时,对操作
6、SetLocalTime(SysTime) ,设置本地时间(API)
7、GetLocalTime(SystemTime),获取本地系统时间(API)
三、实现代码如下
function eTime(Host:string):string; // 与⽹络上获取时间并同步
var IdDayTime1: TIdDayTime;
tzInfo: Time_Zone_Information; // 系统参数
hBias, // ⼩时 偏差
mBias: Integer; // 分钟 偏差
TimeStr:String; // 时间字符
SysTime: TSystemTime; // TSystemTime 是系统定义的结构, 16 个字节:
function IsNumber(aVal: string): Boolean;
var
a:Integer;
begin
try
Result:=True;
a:=StrToInt(aVal);
except
Result:=False;
end;
end;
begin
GetTimeZoneInformation(tzInfo); // 获取系统当地时间(时区设置)信息
hBias:= div 60; // 获取当地时区和格林威治的⼩时差
mBias:= mod 60; // 获取当地时区和格林威治的分钟差
IdDayTime1:=(Application); // 创建IdDayTime
try
:=Host; // 从热点获取时间
TimeStr:=Trim(eStr); // 返回时间字符串
if Copy(TimeStr,1,6)='Access' then
begin
showMessage(' 访问频率太官密!');
exit;
end;
if TimeStr='' then
begin
showMessage('未获取⽹页时间!');
exit;
end;
// 下⾯分别向SysTime分解字符串的值
if IsNumber(Copy(TimeStr,1,5)) then
begin
:=StrToInt(Copy(TimeStr,7,2)); // 年度仅2位 21世纪要加⼊2000
:=StrToInt(Copy(TimeStr,10,2));
end;
procedure 1Click(Sender: TObject); // 获取时间
begin
:=getDateTime('');
end;
procedure 2Click(Sender: TObject);
var systemtime:Tsystemtime;
DateTime:TDateTime;
begin
DateSeparator:='-';
ShortDateFormat:='yyyy-MM-dd';
LongDateFormat:='yyyy''年'',MM''⽉'',dd''⽇''';
TimeSeparator:=':';
DateTime:=StrToDateTime(); //获得时间(TDateTime格式)
DateTimeToSystemTime(DateTime,systemtime); //把Delphi的TDateTime格式转化为API的TSystemTime格式
SetLocalTime(SystemTime); //设置系统时间
GetLocalTime(SystemTime); //读取系统时间
DateTime:=SystemTimeToDateTime(SystemTime); //把API的TSystemTime格式 转化为 Delphi的TDateTime格式
:=DateTimeToStr(DateTime)
end;
四、测试结果,D7和XE10.2中,通过。成功取决于⽹站的返回率。
另外,考虑到访问⽹站获取时间值到修改本地时间,有⼏秒钟的误差,设置本地时间时,应加上误差值。


发布评论