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); //DelphiTDateTime格式转化为APITSystemTime格式

SetLocalTime(SystemTime); //设置系统时间

GetLocalTime(SystemTime); //读取系统时间

DateTime:=SystemTimeToDateTime(SystemTime); //APITSystemTime格式 转化为 DelphiTDateTime格式

:=DateTimeToStr(DateTime)

end;

四、测试结果,D7和XE10.2中,通过。成功取决于⽹站的返回率。

另外,考虑到访问⽹站获取时间值到修改本地时间,有⼏秒钟的误差,设置本地时间时,应加上误差值。