Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Синхронизация времени   Найти похожие ветки 

 
GUEST   (2004-08-11 04:16) [0]

Как синхронизировать время с атомными часами через интернет?
Заранее благодарю.


 
TUser ©   (2004-08-11 05:12) [1]

Насчет атомных часов не знаю, но есть специальные сервера, с которых мжно узнать время. Атомные там часы стоят или песочные - это надо спросить у хозяина сервера. Поищи, может найдешь с атомными.


 
GUEST   (2004-08-11 05:27) [2]

Да атомные это так, забыл в кавычки взять :)
Как вообще организовать взаимодействие программы с этими серверами? как узнать время?


 
TUser ©   (2004-08-11 05:57) [3]

Я точно видел на DelphiWorld статью об этих серверах. Сейчас вот не могу ее найти, но она там точно есть. Поищи.


 
GUEST   (2004-08-11 08:40) [4]

ну можеть у кого примерчик есть, я тоже на сайт ене нашел...


 
REA ©   (2004-08-11 09:53) [5]

Вот, например TIdTime, TIdSNTP. Сам не пробовал.

Unit IdTime

Description
TIdTime is a client implementation of the Time Protocol as described in the Internet Standards document:

RFC 868 - Time Protocol (http://www.rfc-editor.org/rfc/rfc868.txt)

Time is a simple protocol for synchronizing time on a local network. For a time protocol with higher accuracy over several networks, use TIdSNTP. To retrieve the current date and time in human-readable form, use TIdDayTime.

Please note that the Time Protocol in its current form cannot handle most dates after the year 2035. This limitation is stated in RFC 868.


 
Мастер ©   (2004-08-11 12:05) [6]

procedure TForm1.Button1Click(Sender: TObject);
var
 iT: tIdTime;
 CurrTime: TDateTime;
 st: TSystemTime;
 YY,MM,DD,HH,NN,SS,MS: Word;
begin
 iT := tIdTime.Create(nil);
 iT.Host := "ntps1-0.uni-erlangen.de";
 CurrTime := iT.DateTime;
 iT.Free;
 GetLocalTime(st);
 DecodeDate(CurrTime,YY,MM,DD);
 DecodeTime(CurrTime,HH,NN,SS,MS);
 st.wYear := YY;
 st.wMonth := MM;
 st.wDay := DD;
 st.wHour := HH;
 st.wMinute := NN;
 st.wSecond := SS;
 st.wMilliseconds := MS;
 SetLocalTime(st);
end;


 
easy ©   (2004-08-11 14:22) [7]

unit frmMainU;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ScktComp, StdCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   ClientSocket1: TClientSocket;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function ntohl(const value: cardinal): cardinal;
asm
 mov edx, eax
 mov ecx, eax
 shl ecx, 16
 and eax, $0000ff00
 or eax, ecx
 mov ecx, edx
 shl eax, 8
 and ecx, $00ff0000
 shr edx, 16
 or ecx, edx
 shr ecx, 8
 or eax, ecx
end;

function TimeZoneBias: Double;
var
 ATimeZone: TTimeZoneInformation;
begin
 if (GetTimeZoneInformation(ATimeZone) = TIME_ZONE_ID_DAYLIGHT) then
 begin
   result := ATimeZone.Bias + ATimeZone.DaylightBias;
 end
 else
 begin
   result := ATimeZone.Bias + ATimeZone.StandardBias;
 end;
 Result := Result / 1440;
end;

function SecsToTime(ASecs: Cardinal): TDateTime;
const
 SECS_PER_DAY = 24 * 60 * 60;
 UNIX_OFFSET = 25569;
begin
 Result := ntohl(ASecs) / SECS_PER_DAY + encodedate(1900, 1, 1) - TimeZoneBias;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Clear;
 memo1.Lines.Add("Connecting to " + ClientSocket1.Host + "...");
 ClientSocket1.Open;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ClientSocket1.Host := "time-A.timefreq.bldrdoc.gov";
 ClientSocket1.Port := 37;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 buf: Cardinal;
begin
 Socket.ReceiveBuf(buf, sizeof(buf));
 memo1.Lines.Add(#13#10 + "-----------------------");
 memo1.Lines.Add(formatdatetime("dd.mm.yyyy hh:nn:ss", SecsToTime(buf)));
 memo1.Lines.Add("-----------------------"#13#10);
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 memo1.Lines.Add("Connect");
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 memo1.Lines.Add("Disonnect");
end;

end.


 
Vit@ly ©   (2004-08-11 15:38) [8]

В посте не "заметил" слова Delphi
http://www.express-computing.com/files/download.com/ExpressTimeSync30.exe
Триальная версия на 30 дней



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
14-1095943257
Igorek
2004-09-23 16:40
2004.10.17
Генератор патчей


9-1087359964
AndruhaO
2004-06-16 08:26
2004.10.17
Видеорежим


14-1096296459
Stef
2004-09-27 18:47
2004.10.17
Многопоточность


1-1096363145
msguns
2004-09-28 13:19
2004.10.17
Сообщение от одной форме другой


1-1096919415
GanibalLector
2004-10-04 23:50
2004.10.17
USES ???