关于系统时间的问题。********* ( 积分: 0 )

  • 主题发起人 主题发起人 lifangchao2008
  • 开始时间 开始时间
L

lifangchao2008

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在所做的程序是根据当前系统时间来判断,然后执行指定的代码。<br>如:<br>var<br>&nbsp;&nbsp;GetRightStr&nbsp;:&nbsp;String;<br>&nbsp;&nbsp;GetNow&nbsp;:&nbsp;String;<br>begin<br>&nbsp;&nbsp;GetNow&nbsp;:=&nbsp;TimeToStr(Now());//获取当前系统时间<br>&nbsp;&nbsp;if&nbsp;GetNow&nbsp;&gt;=&nbsp;'15:00:00'&nbsp;then&nbsp;&nbsp;//如果当前系统时间&gt;=下午3:00<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox('-&nbsp;-!','提示',64);//则无法执行<br>&nbsp;&nbsp;&nbsp;&nbsp;Exit<br>&nbsp;&nbsp;end;<br>问题是,系统时间是可以改变的,如何获取当前的真正时间,而不是当前系统时间!
 
恐怕不行吧<br>可以试试查网上的标准时间
 
我也想知道這個,<br>執行程序的電腦必須能上網吧,否則就得不到真正的現在時間.
 
你可以获取网络时间,这样就解决了[8D]<br>从Internet时间服务器获取标准格林尼治时间<br><br>&nbsp;<br><br>由于本机系统时间不准确,所以决定从Internet&nbsp;时间服务器获取标准时间来校正&nbsp;&nbsp;系统时间,说干就干。<br><br>程序设计步骤如下:<br><br>1、&nbsp;&nbsp;新建一个工程;<br><br>2、&nbsp;&nbsp;在窗体上放一个TEdit控件和一个TClientSocket(在Internet页下)控件。TEdit用来显示取得的格林尼治时间转化成北京时间后的时间,TClientSocket用来从Internet&nbsp;时间服务器获取标准的格林尼治时间;<br><br>3、&nbsp;&nbsp;程序代码如下:<br><br>procedure&nbsp;TForm1.FormCreate(Sender:&nbsp;TObject);<br><br>begin<br><br>&nbsp;&nbsp;ClientSocket1.Host&nbsp;:='tick.usno.navy.mil';&nbsp;&nbsp;//&nbsp;美国海军天文台;<br><br>&nbsp;&nbsp;ClientSocket1.Port&nbsp;:=13;<br><br>&nbsp;&nbsp;ClientSocket1.Open;<br><br>end;<br><br>&nbsp;<br><br>procedure&nbsp;TForm1.ClientSocket1Read(Sender:&nbsp;TObject;<br><br>&nbsp;&nbsp;Socket:&nbsp;TCustomWinSocket);<br><br>var<br><br>&nbsp;&nbsp;TempTime:&nbsp;TDateTime;<br><br>&nbsp;&nbsp;hh,mm,ss,ms:&nbsp;word;<br><br>&nbsp;&nbsp;sTime&nbsp;:&nbsp;string;<br><br>begin<br><br>&nbsp;&nbsp;sTime&nbsp;:=&nbsp;Socket.ReceiveText;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;取得格林尼治时间;<br><br>&nbsp;&nbsp;sTime:=Copy(sTime,12,8);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;取得时间部分;<br><br>&nbsp;&nbsp;DecodeTime(StrToTime(sTime),hh,mm,ss,ms);&nbsp;&nbsp;<br><br>&nbsp;&nbsp;hh:=(hh+8)&nbsp;mod&nbsp;24;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;转化成北京时间;<br><br>&nbsp;&nbsp;TempTime:=EncodeTime(hh,mm,ss,ms);<br><br>&nbsp;&nbsp;Edit1.Text&nbsp;:=TimeToStr(TempTime);<br><br>end;<br><br>&nbsp;&nbsp;&nbsp;<br><br>4、&nbsp;&nbsp;编译运行,稍微等几秒钟(和你的网络速度有关,笔者等了大概一秒钟),TEdit控件就显示出了由格林尼治时间转化得到的北京时间。<br><br>&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;怎么样?很简单吧。赶快试一下吧!需要说明一点:由于网络延时的缘故,这<br><br>&nbsp;个程序得到的时间会和标准时间有几秒的误差,但除非你用来控制火箭的发射,否<br><br>&nbsp;&nbsp;则,这无妨大碍。<br><br>笔者是从美国海军天文台得到标准时间,你还可以从别的时间服务器上获间,但由于每个时间服务器的时间格式不同,所以在编写程序时要注意作相应的处理。<br><br>&nbsp;&nbsp;&nbsp;域名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;组织<br><br>Clock.sgi.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SGI<br><br>Tick.mit.edu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;麻省理工学院<br><br>Time.nist.gov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NIST
 
估计你想实现的是以某个时间为标准时间的功能,没必要非得格林尼治。<br>在你的局域网里面找一台服务器不能随便改时间,然后每个客户端从他那里得到时间就可以了,再或者你的服务器端就是控制端,不就解决问题了吗?
 
后退
顶部