Terinspirasi dari pertanyaan seorang member pada sebuah grup.
Diawali dengan pertanyaan .. bagaimana agar datetimepicker pada aplikasi mengikuti jam yang ada di komputer ?
Kemudian dilanjutkan .. bagaimana kalo jamnya mengambil dari server ?
Berlanjut lagi .. kalo mengambil dari internet bagaimana ?
Kali ini kita hanya akan membahas yang terakhir yaitu mengambil waktu saat ini dengan bantuan komponen TidSNTP (Indy 10) menggunakan Delphi.
Caranya mudah sekali, kita tinggal manfaatkan komponen siap pake yaitu TidSNTP punya Indy 10.
Langsung saja ya … ini source codenya ..
unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdSNTP, ExtCtrls; type TFMain = class(TForm) Label1: TLabel; IdSNTP1: TIdSNTP; Label2: TLabel; Label3: TLabel; stJamPC: TStaticText; stJamInet: TStaticText; bCocok: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure bCocokClick(Sender: TObject); private { Private declarations } public { Public declarations } end; const tmServer = 'pool.ntp.org'; // internet time server (* Alternatif lain : time.windows.com time.nist.gov *) var FMain: TFMain; Delta: TDateTime; // untuk menyimpan selisih waktu PC vs Internet implementation {$R *.dfm} procedure TFMain.bCocokClick(Sender: TObject); begin IdSNTP1.SyncTime; Delta:=0; end; procedure TFMain.FormCreate(Sender: TObject); begin with IdSNTP1 do begin Host:=tmServer; Delta:=Now-DateTime; // menghitung selisih waktu end; end; procedure TFMain.Timer1Timer(Sender: TObject); begin stJamPC.Caption:=FormatDateTime('dd mmmm yyyy - hh:nn.ss',Now); stJamInet.Caption:=FormatDateTime('dd mmmm yyyy - hh:nn.ss',Now-Delta); end; end.
Cara kerjanya sebagai berikut :
Pada event CreateForm kita akan mengambil selisih waktu yang ada di komputer dibandingkan dengan waktu yang ada di internet dan disimpan dalam variable Delta.
Variable Delta ini nantinya kita manfaatkan untuk menampilkan secara terus menerus setiap detik dengan menggunakan komponen TTimer.
Kenapa harus disimpan dulu selisihnya? kok gak langsung ambil aja dari internet secara realtime?
Tujuannya adalah untuk menghemat bandwidth sehingga program tidak menjadi berat karena selalu mengakses ke internet apalagi kalo lagi lemot, toh setelah selisih kita ketahui maka kita akan bisa menghitung waktu yang ada di internet dengan menggunakan selisih tadi.
Sekian dulu ya …
Contoh project beserta source codenya dapat didownload di https://www.box.com/s/msiye9u8xryp2pr2b8kp
Semoga bermanfaat.