在delphi中获取internet时间
我想从网上得到时间和日期 我使用了以下代码在delphi中获取internet时间,delphi,datetime,indy,Delphi,Datetime,Indy,我想从网上得到时间和日期 我使用了以下代码 IdDayTime1.ReadTimeout := 5000; IdDayTime1.Host := 'www.time.windows.com'; IdDayTime1.Port := 37 ; Label1.Caption := IdDayTime1.DayTimeStr; 但我得到:套接字错误#11004 这是什么?我做错了什么 我的互联网和其他东西正常套接字错误11004表示“地址不正确”“。您需要去掉www.前缀,正确的地址是tim
IdDayTime1.ReadTimeout := 5000;
IdDayTime1.Host := 'www.time.windows.com';
IdDayTime1.Port := 37 ;
Label1.Caption := IdDayTime1.DayTimeStr;
但我得到:套接字错误#11004
这是什么?我做错了什么
我的互联网和其他东西正常套接字错误11004表示“地址不正确”“。您需要去掉www.前缀,正确的地址是time.windows.com 尝试在ntp pool.org服务器上使用Indy ntp客户端组件。如果您有任何问题,我将发布一些示例代码。协议不是NTP协议。白天使用端口13,而不是37。37由协议使用,而不是NTP协议,NTP协议使用123(UDP)。我不知道time.windows.com是否支持日间和时间协议,现在从可靠时间源获取时间最常用的协议是,它更简单的同级SNTP,它取代了日间和时间协议。下面是一些简单的代码,展示了idSNTP组件的使用
var
SNTPClient: TIdSNTP;
begin
SNTPClient := TIdSNTP.Create(nil);
try
SNTPClient.Host := 'pool.ntp.org';
SNTPClient.SyncTime;
finally
SNTPClient.Free;
end;
end;
如果获得时间和日期,请使用Indy IdSNTP组件并设置:
主机:time.windows.com
和在事件计时器(TTimer组件)上写入:
你们可以在表格(标签1,标签2)上看到现在的日期和现在的时间。所以如果你设定时间同步
put
IdSNTP1.SyncTime代码>事件计时器1计时器。我同意这一点,我正要自己写一个答案,但后来我发现“time.windows.com”也不能用。可能是防火墙问题?但是Windows防火墙不应该显示弹出消息吗?嘿,谢谢,但还有其他错误:#10060连接超时我已经尝试了好几个时间服务器,但没有人工作,所以至少在time.Windows.com上没有问题。我在网上也试过很多,但没有一个有效,例如“time.nist.gov”,谢谢,我找到了Indy ntp客户端组件,但我还不够成熟,无法使用它们。请发布一些示例。我刚刚尝试了time.windows.com和意大利官方时间(IEN),它可以正常工作。使用Indy 10.5.5实际上,pool.ntp.org是DNS循环,所以生成的时间戳质量随机变化。我知道,但我并不打算将其用于生产代码,只是一个示例。如果您需要精确定位,请为您的地理位置使用其中一个1层域。那么,应该使用哪个Indy
组件tiddayay
,TIdDayTimeUDP
,或TIdSNTP
?除非您必须使用较旧的协议支持某些旧服务器,否则要使用的组件是TIdSNTP我们必须将IdSNTP与主机:pool.ntp.org端口:123配合使用,TIdSNTP
与se.pool.ntp.org
配合使用。代码DateTimeToStr(IdSNTP1.DateTime)
返回1942-08-05 01:48:22
@Andreas Rejbrand仅尝试使用“pool.ntp.org”作为主机。ntp.org支持metime.windows.com的ok,AFAIK仅支持ntp。如果您喜欢使用较旧的procols,NIST服务器()仍然支持白天和时间协议。我看到许多其他事情都不正常。我听说Time.windows.com已经关闭down@David当前位置尽管如此,对我仍然有效@Vibeeshan:+1因为我不明白为什么有人否决了你。我曾经尝试过(徒劳地)让这样的事情发生,所以这是一个非常有效的问题。(这也不是说Idsandon的方法对我有效,但这个问题仍然有效。)是的,time.windows.com很好,显然是在胡说八道!当我使用SNTPClient.SyncTime运行此命令时代码>替换为ShowMessage(DateTimeToStr(SNTPClient.DateTime))代码>我得到了1942-08-0517:13:16
。这应该行得通。发布一个完整的代码示例,我们可以尝试了解发生了什么。最好使用:Label1.Caption:=datetimetostr(IdSNTP1.DateTime);
Label1.Caption := DateToStr(IdSNTP1.DateTime)
+ ' - ' + TimeToStr(IdSNTP1.DateTime);
Label2.Caption := IdSNTP1.Host;