明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

從Internet時(shí)間服務(wù)器取得規(guī)范時(shí)間

[摘要]由于本機(jī)系統(tǒng)時(shí)間不準(zhǔn)確,所以決定從Internet 時(shí)間服務(wù)器獲取標(biāo)準(zhǔn)時(shí)間來校正 系統(tǒng)時(shí)間,說干就干。 程序設(shè)計(jì)步驟如下: 1、 新建一個(gè)工程; 2、 在窗體上放一個(gè)TEdit控件和一個(gè)TClientSocket(在Internet頁(yè)下)控件。TEdit用來顯示取得的格林尼治時(shí)間轉(zhuǎn)化成北京時(shí)...
由于本機(jī)系統(tǒng)時(shí)間不準(zhǔn)確,所以決定從Internet 時(shí)間服務(wù)器獲取標(biāo)準(zhǔn)時(shí)間來校正  系統(tǒng)時(shí)間,說干就干。

程序設(shè)計(jì)步驟如下:

1、  新建一個(gè)工程;

2、  在窗體上放一個(gè)TEdit控件和一個(gè)TClientSocket(在Internet頁(yè)下)控件。TEdit用來顯示取得的格林尼治時(shí)間轉(zhuǎn)化成北京時(shí)間后的時(shí)間,TClientSocket用來從Internet 時(shí)間服務(wù)器獲取標(biāo)準(zhǔn)的格林尼治時(shí)間;

3、  程序代碼如下:

procedure TForm1.FormCreate(Sender: TObject);

begin

  ClientSocket1.Host :='tick.usno.navy.mil';  // 美國(guó)海軍天文臺(tái);

  ClientSocket1.Port :=13;

  ClientSocket1.Open;

end;

  

procedure TForm1.ClientSocket1Read(Sender: TObject;

  Socket: TCustomWinSocket);

var

  TempTime: TDateTime;

  hh,mm,ss,ms: word;

  sTime : string;

begin

  sTime := Socket.ReceiveText;    // 取得格林尼治時(shí)間;

  sTime:=Copy(sTime,12,8);      // 取得時(shí)間部分;

  DecodeTime(StrToTime(sTime),hh,mm,ss,ms);   

  hh:=(hh+8) mod 24;           // 轉(zhuǎn)化成北京時(shí)間;

  TempTime:=EncodeTime(hh,mm,ss,ms);

  Edit1.Text :=TimeToStr(TempTime);

end;

    

4、  編譯運(yùn)行,稍微等幾秒鐘(和你的網(wǎng)絡(luò)速度有關(guān),筆者等了大概一秒鐘),TEdit控件就顯示出了由格林尼治時(shí)間轉(zhuǎn)化得到的北京時(shí)間。

  

     怎么樣?很簡(jiǎn)單吧。趕快試一下吧!需要說明一點(diǎn):由于網(wǎng)絡(luò)延時(shí)的緣故,這

個(gè)程序得到的時(shí)間會(huì)和標(biāo)準(zhǔn)時(shí)間有幾秒的誤差,但除非你用來控制火箭的發(fā)射,否

  則,這無妨大礙。

筆者是從美國(guó)海軍天文臺(tái)得到標(biāo)準(zhǔn)時(shí)間,你還可以從別的時(shí)間服務(wù)器上獲間,但由于每個(gè)時(shí)間服務(wù)器的時(shí)間格式不同,所以在編寫程序時(shí)要注意作相應(yīng)的處理。

   域名                                組織

Clock.sgi.com                       SGI

Tick.mit.edu                   麻省理工學(xué)院

Time.nist.gov                        NIST