Cara mudah mengambil waktu saat ini dari Internet menggunakan Indy 10


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.

Leave a Reply

Your email address will not be published.